CentOS 官方倉庫 PHP 版本過舊 (5.4/5.6),生產環境需啟用 Remi 源 安裝 PHP 7.x/8.x。本文提供標準化 SOP,含源配置、版本切換、擴展批量安裝、服務重啟驗證,適合自動化腳本直接引用。
# CentOS 7 yum -y install epel-release yum -y install https://rpms.remirepo.net/enterprise/remi-release-7.rpm # CentOS 6 (EOL,僅供維舊參考) yum -y install epel-release yum -y install https://rpms.remirepo.net/enterprise/remi-release-6.rpm
編輯 /etc/yum.repos.d/remi.repo,將欲安裝版本的 enabled=1,其餘設 0:
# PHP 7.4 範例 [remi-php74] name=Remi's PHP 7.4 RPM repository for Enterprise Linux 7 - $basearch mirrorlist=https://rpms.remirepo.net/enterprise/7/php74/mirror enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi # 同時關閉其他版本 [remi-php73] enabled=0 [remi-php80] enabled=0 ...
一鍵切換腳本 (PHP 7.4 → 8.1):
yum-config-manager --disable remi-php74 yum-config-manager --enable remi-php81 yum -y update php* # 滾動升級
# 基礎 + FPM + CLI yum -y install php php-cli php-fpm php-common # 資料庫 yum -y install php-mysqlnd php-pdo php-pgsql php-odbc # 快取/Session yum -y install php-opcache php-apcu php-redis php-memcached php-memcache # 圖片/文件處理 yum -y install php-gd php-imagick php-zip php-bz2 # 開發/除錯 yum -y install php-xml php-mbstring php-json php-intl php-bcmath php-gmp php-process php-pear php-devel # 高效能/非同步 yum -y install php-swoole php-uv php-event # 視內核版本支援度 # 安全/加密 yum -y install php-sodium php-openssl # 通常內建 # 搜尋/日誌 yum -y install php-solr php-seaslog
# 1. Opcache (必開) # /etc/php.d/10-opcache.ini opcache.enable=1 opcache.memory_consumption=256 opcache.interned_strings_buffer=16 opcache.max_accelerated_files=20000 opcache.validate_timestamps=0 # 生產環境 0,部署後需 reload php-fpm opcache.save_comments=1 # 2. php-fpm 池子調整 (www.conf) pm = dynamic pm.max_children = 100 pm.start_servers = 10 pm.min_spare_servers = 5 pm.max_spare_servers = 20 pm.max_requests = 1000 request_terminate_timeout = 60s # 3. 安全相關 expose_php = Off display_errors = Off log_errors = On error_log = /var/log/php-fpm/error.log date.timezone = Asia/Taipei
六、常見坑點與解決
- 缺少 libzip / libwebp: Remi 源通常自動解決依賴,若報錯手動
yum install libzip-devel libwebp-devel- PHP 8.1+ 移除的擴展:
memcache(非 memcached)、mcrypt→ 改用pecl install或遷移代碼- 多版本共存: 使用
php74-php-fpm,php81-php-fpm等 SCL 風格套件,路徑在/opt/remi/php74/- 防火牆:
firewall-cmd --add-port=9000/tcp --permanent && firewall-cmd --reload(php-fpm 預設端口)七、Docker 化替代方案 (推薦新專案)
# Dockerfile 片段 FROM php:8.2-fpm-alpine RUN apk add --no-cache $PHPIZE_DEPS \ && pecl install redis swoole \ && docker-php-ext-enable redis swoole opcache \ && docker-php-ext-install pdo_mysql gd bcmath intl容器化可避免系統級依賴衝突,構建鏡像即鎖定版本,部署一致性更強。