Skip to content

Instantly share code, notes, and snippets.

@bangbuiduc
Created January 5, 2026 03:07
Show Gist options
  • Select an option

  • Save bangbuiduc/86407847fb719e729f728c8709479c20 to your computer and use it in GitHub Desktop.

Select an option

Save bangbuiduc/86407847fb719e729f728c8709479c20 to your computer and use it in GitHub Desktop.
#!/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