Created
January 5, 2026 03:07
-
-
Save bangbuiduc/86407847fb719e729f728c8709479c20 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/bin/bash | |
| # 1. Chặn các popup tương tác và cấu hình tự động restart dịch vụ | |
| export DEBIAN_FRONTEND=noninteractive | |
| export NEEDRESTART_MODE=a | |
| # Script cài MongoDB extension phiên bản 1.17.3 CHO TẤT CẢ PHIÊN BẢN PHP | |
| # Cách compile thủ công riêng biệt → HOÀN TOÀN KHÔNG CONFLICT giữa các version | |
| # Ubuntu 22.04+ (hỗ trợ PHP 7.4, 8.1, 8.2, ...) | |
| set -e | |
| VERSION="1.17.3" | |
| TARBALL="mongodb-${VERSION}.tgz" | |
| URL="https://pecl.php.net/get/mongodb-${VERSION}.tgz" | |
| echo "Bắt đầu cài MongoDB extension ${VERSION} cho tất cả phiên bản PHP (cách an toàn không conflict)..." | |
| # Cài package cần thiết chung | |
| sudo apt update | |
| sudo apt install -y build-essential pkg-config libssl-dev | |
| # Tải source một lần | |
| if [ ! -f "$TARBALL" ]; then | |
| wget "$URL" -O "$TARBALL" | |
| fi | |
| # Phát hiện các phiên bản PHP đã cài (qua phpize*) | |
| PHP_VERSIONS=() | |
| for phpize_cmd in /usr/bin/phpize*; do | |
| if [[ -x "$phpize_cmd" && "$phpize_cmd" =~ phpize([0-9]+\.[0-9]+)$ ]]; then | |
| ver="${BASH_REMATCH[1]}" | |
| PHP_VERSIONS+=("$ver") | |
| fi | |
| done | |
| # Fallback nếu không tìm thấy | |
| if [ ${#PHP_VERSIONS[@]} -eq 0 ]; then | |
| for v in 8.3 8.2 8.1 8.0 7.4 7.3; do | |
| if [ -x "/usr/bin/phpize$v" ]; then | |
| PHP_VERSIONS+=("$v") | |
| fi | |
| done | |
| fi | |
| echo "Phát hiện các phiên bản PHP: ${PHP_VERSIONS[*]}" | |
| if [ ${#PHP_VERSIONS[@]} -eq 0 ]; then | |
| echo "Không tìm thấy phiên bản PHP nào có phpize! Kiểm tra lại." | |
| exit 1 | |
| fi | |
| # Giải nén source ra thư mục tạm | |
| tar -xzf "$TARBALL" | |
| SRC_DIR="mongodb-${VERSION}" | |
| # Xử lý từng phiên bản PHP riêng biệt | |
| for ver in "${PHP_VERSIONS[@]}"; do | |
| echo "" | |
| echo "=== Cài cho PHP $ver (compile riêng - không conflict) ===" | |
| # Cài dev package | |
| sudo apt install -y php${ver}-dev | |
| # Gỡ extension cũ nếu có (xóa file .so trực tiếp trong thư mục extension của version này) | |
| EXT_DIR=$(/usr/bin/php-config${ver} --extension-dir 2>/dev/null || echo "") | |
| if [ -n "$EXT_DIR" ] && [ -f "$EXT_DIR/mongodb.so" ]; then | |
| echo "Xóa mongodb.so cũ trong $EXT_DIR" | |
| sudo rm -f "$EXT_DIR/mongodb.so" | |
| fi | |
| # Xóa dòng extension cũ trong tất cả php.ini của version này | |
| for ini in /etc/php/$ver/*/php.ini; do | |
| [ -f "$ini" ] && sudo sed -i '/extension=mongodb.so/d' "$ini" | |
| done | |
| # Compile thủ công với công cụ đúng version | |
| cd "$SRC_DIR" | |
| /usr/bin/phpize${ver} | |
| ./configure --with-php-config=/usr/bin/php-config${ver} | |
| make clean >/dev/null 2>&1 || true | |
| make -j$(nproc) | |
| sudo make install | |
| cd .. | |
| # Kiểm tra file .so đã được đặt đúng chưa | |
| NEW_EXT_DIR=$(/usr/bin/php-config${ver} --extension-dir) | |
| if [ -f "$NEW_EXT_DIR/mongodb.so" ]; then | |
| echo "Thành công: mongodb.so đã được cài vào $NEW_EXT_DIR" | |
| else | |
| echo "LỖI: Không tìm thấy mongodb.so trong thư mục extension của PHP $ver" | |
| exit 1 | |
| fi | |
| # Kích hoạt extension trong tất cả php.ini | |
| for ini in /etc/php/$ver/*/php.ini; do | |
| if [ -f "$ini" ]; then | |
| echo "extension=mongodb.so" | sudo tee -a "$ini" >/dev/null | |
| echo "Đã kích hoạt trong $ini" | |
| fi | |
| done | |
| # Restart dịch vụ nếu có | |
| if systemctl is-active --quiet php${ver}-fpm 2>/dev/null; then | |
| sudo systemctl restart php${ver}-fpm | |
| echo "Restart php${ver}-fpm" | |
| fi | |
| # Kiểm tra nhanh | |
| echo "Kiểm tra phiên bản cho PHP $ver:" | |
| php${ver} --ri mongodb 2>/dev/null | grep "MongoDB extension version" || echo " (chưa load, restart service nếu cần)" | |
| done | |
| # Restart Apache nếu dùng | |
| if systemctl is-active --quiet apache2 2>/dev/null; then | |
| sudo systemctl restart apache2 | |
| fi | |
| # Cleanup | |
| rm -rf "$SRC_DIR" "$TARBALL" | |
| echo "" | |
| echo "HOÀN TẤT! MongoDB extension 1.17.3 đã được cài riêng biệt cho từng phiên bản PHP." | |
| echo "Không còn conflict nữa. Kiểm tra thủ công:" | |
| for ver in "${PHP_VERSIONS[@]}"; do | |
| echo " php$ver --ri mongodb" | |
| done |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment