make clean && ./configure ... && make && make install 並重啟 Apache。LoadModule 路徑)。# 1. 下載並解壓
cd /usr/local
wget https://archive.apache.org/dist/httpd/httpd-2.0.64.tar.gz
tar zxvf httpd-2.0.64.tar.gz
cd httpd-2.0.64
# 2. 配置:指定安裝路徑、啟用 DSO 支援
./configure --prefix=/usr/local/apache2 --enable-module=so
# 或舊版寫法:--enable-shared=max
# 3. 編譯安裝
make && make install
# 1. 下載 PHP 源碼
cd /usr/local
wget https://www.php.net/distributions/php-8.2.10.tar.gz
tar zxvf php-8.2.10.tar.gz
cd php-8.2.10
# 2. 配置:指定 apxs、MySQL 路徑(視需求增減)
./configure \
--with-apxs2=/usr/local/apache2/bin/apxs \
--with-mysql=/usr/local/mysql \
--with-pdo-mysql=mysqlnd \
--with-openssl \
--with-zlib \
--enable-mbstring \
--with-curl \
--enable-fpm \
--prefix=/usr/local/php82
# 3. 編譯安裝
make && make install
# 4. 安裝過程會自動修改 httpd.conf 加入:
# LoadModule php_module modules/libphp.so
# AddType application/x-httpd-php .php
# httpd.conf
ServerAdmin admin@example.com
ServerName localhost:80
# PHP 檔案類型對應
AddType application/x-httpd-php .php .phtml .inc
AddType application/x-httpd-php-source .phps
# 目錄索引
DirectoryIndex index.php index.html
# 安全:隱藏版本資訊
ServerTokens Prod
ServerSignature Off
/usr/local/apache2/bin/apachectl start
# 建立測試檔
echo '' > /usr/local/apache2/htdocs/phpinfo.php
# 瀏覽器訪問 https://localhost/phpinfo.php
cd /usr/local/php-8.2.10
make clean
./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql=... (相同參數)
make && make install
/usr/local/apache2/bin/apachectl graceful # 平滑重啟載入新模組
| 現象 | 原因與解決 |
|---|---|
| apxs not found | Apache 未啟用 --enable-so 或路徑錯誤,確認 /usr/local/apache2/bin/apxs 存在 |
| libphp.so 載入失敗 | 缺少依賴庫 (ldd 檢查)、SELinux 阻擋、Apache 版本不匹配 (2.2 vs 2.4) |
| .php 顯示原始碼 | 缺少 AddType、DirectoryIndex、或模組未載入 |
| 權限錯誤 | DocumentRoot 目錄需 Require all granted (Apache 2.4) |
php:8.2-apache, php:8.2-fpm 開箱即用。apt install php8.2 libapache2-mod-php8.2 (Ubuntu), dnf install php php-mysqlnd (RHEL/Fedora)。DSO 模式是傳統 LAMP 架構中 PHP 與 Apache 整合的黃金標準,展示了「編譯時綁定、執行時動態載入」的模組化設計智慧。雖然 PHP-FPM 已成為現代主流,但理解 DSO 原理有助於排查模組載入問題、遷移舊系統、設計可擴展的伺服器架構。