生產環境常需特定 PHP 版本與擴展,包管理器版本過舊或缺模塊時,手動編譯是必經之路。本文記錄 Ubuntu 13.10 i386 下從源碼編譯 PHP 5.5.6、GD2 庫、Memcache 服務端與客戶端擴展的完整過程,重點解決依賴順序、GD2 缺 XPM、phpize 缺 autoconf 等經典坑點。
/usr/local/ 下各自目錄PHP configure 依賴多個庫,且庫之間有依賴關係,必須按順序編譯安裝:
zlib → freetype → libpng → libjpeg → libgd2 → libxml2 → libmcrypt → libXpm
gd2 依賴 zlib、freetype、libpng、libjpeg、libXpm。freetype 配置時可能報 LIBPNG_CFLAGS 找不到,需先裝 libpng 並導出 PATH。# 解決:將 libpng bin 目錄加入 PATH
vi /etc/profile
LIB_PNG=/usr/local/libpng/bin
PATH=$LIB_PNG:$PATH
export PATH
. /etc/profile
現象: gd2 ./configure 成功、make 成功,但摘要顯示 Support for Xpm library: no。PHP make 時編譯 ext/gd/gd.c 報錯缺 xpm.h。
根因: gd2 編譯時未檢測到 libXpm,導致生成的庫不包含 XPM 支持,PHP 編譯時雖指定 --with-gd 但底層缺符號。
解決路徑:
libXpm-dev:apt-get install libXpm-devgd2 並指定 XPM 路徑:./configure --with-xpm=/usr/lib(仍可能報找不到)i386-linux-gnu,64 位為 x86_64-linux-gnu):
ln -s /usr/lib/i386-linux-gnu/libXpm.a /usr/lib/libXpm.a
ln -s /usr/lib/i386-linux-gnu/libXpm.so /usr/lib/libXpm.so
ln -s /usr/lib/i386-linux-gnu/libXpm.so.4 /usr/lib/libXpm.so.4
ln -s /usr/lib/i386-linux-gnu/libXpm.so.4.11 /usr/lib/libXpm.so.4.11
./configure --with-xpm=/usr/lib → 摘要出現 Support for Xpm library: yes → make && make install。
./configure \
--prefix=/usr/local/php5.5 \
--with-libxml-dir=/usr/local/libxml2/ \
--with-png-dir=/usr/local/libpng/ \
--with-freetype-dir=/usr/local/freetype/ \
--with-gd=/usr/local/gd2/ \
--with-zlib-dir=/usr/local/zlib/ \
--with-mcrypt=/usr/local/libmcrypt/ \
--with-xpm-dir=/usr/lib/ \
--with-mysql \
--with-mysqli \
--enable-pdo \
--with-pdo-mysql \
--with-iconv \
--enable-soap \
--enable-mbstring=all \
--enable-sockets \
--enable-fpm
make && make install 完成後,啟動 PHP-FPM:
/usr/local/php5.5/sbin/php-fpm
# 加入 /etc/rc.local 實現開機自啟
apt-get install memcached
# 啟動
memcached -d -m 128 -p 11211 -u root
# 參數說明:
# -d 守護進程 -m 內存MB -p 端口 -u 用戶(需root)
# 查看端口
netstat -ntlp | grep 11211

兩種安裝方式殊途同歸,最終都需 phpize 生成 configure:
/usr/local/php5.5/bin/pecl install memcachewget https://pecl.php.net/get/memcache-2.2.6.tgz → 解壓 → phpize報錯: phpize: Cannot find autoconf / automake / libtool。

解決: 安裝構建工具鏈:
apt-get install autoconf automake libtool m4
# 重新 phpize → configure → make → make install
編譯成功後,php.ini 添加 extension=memcache.so,重啟 PHP-FPM 驗證 php -m | grep memcache。
ldconfig 刷新庫緩存。Support for Xpm library: no 直接預示後續 PHP 編譯會噴錯,現場補齊。/usr/lib/i386-linux-gnu vs /usr/lib/x86_64-linux-gnu,軟鏈接到 /usr/lib 是通用欺騙 configure 的技巧。autoconf、automake、libtool、m4、pkg-config 缺一不可。後續優化: 生產環境建議使用 php-fpm 池管理、opcache 加速、redis 替代 memcache(更豐富數據結構、持久化、集群)。