Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學

Ubuntu 13.10 手動編譯安裝 PHP 5.5 + Memcache 完整實錄:依賴鏈、GD2 坑、phpize 報錯全解決

編輯:Linux 系統常見問題解答

生產環境常需特定 PHP 版本與擴展,包管理器版本過舊或缺模塊時,手動編譯是必經之路。本文記錄 Ubuntu 13.10 i386 下從源碼編譯 PHP 5.5.6、GD2 庫、Memcache 服務端與客戶端擴展的完整過程,重點解決依賴順序、GD2 缺 XPM、phpize 缺 autoconf 等經典坑點。

環境基線

  • OS:Ubuntu 13.10 (i386)
  • 已裝:Nginx、MySQL
  • 目標:PHP 5.5.6 + Memcache 擴展
  • 安裝前綴:/usr/local/ 下各自目錄

一、 PHP 編譯安裝與依賴鏈梳理

1. 依賴庫安裝順序(關鍵)

PHP configure 依賴多個庫,且庫之間有依賴關係,必須按順序編譯安裝:

zlib → freetype → libpng → libjpeg → libgd2 → libxml2 → libmcrypt → libXpm
  • gd2 依賴 zlib、freetype、libpng、libjpeg、libXpm。
  • freetype 配置時可能報 LIBPNG_CFLAGS 找不到,需先裝 libpng 並導出 PATH。

2. 典型坑:freetype 配置找不到 libpng

# 解決:將 libpng bin 目錄加入 PATH
vi /etc/profile
LIB_PNG=/usr/local/libpng/bin
PATH=$LIB_PNG:$PATH
export PATH
. /etc/profile

3. 核心大坑:GD2 編譯通過但 PHP 編譯報「X11/xpm.h: No such file or directory」

現象: gd2 ./configure 成功、make 成功,但摘要顯示 Support for Xpm library: no。PHP make 時編譯 ext/gd/gd.c 報錯缺 xpm.h。

根因: gd2 編譯時未檢測到 libXpm,導致生成的庫不包含 XPM 支持,PHP 編譯時雖指定 --with-gd 但底層缺符號。

解決路徑:

  1. 安裝 libXpm-dev:apt-get install libXpm-dev
  2. 重新配置 gd2 並指定 XPM 路徑:
    ./configure --with-xpm=/usr/lib(仍可能報找不到)
  3. 關鍵:建立軟鏈接欺騙 configure(32 位系統為 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
  4. 重新 ./configure --with-xpm=/usr/lib → 摘要出現 Support for Xpm library: yes → make && make install。

GD2 配置摘要 XPM yes

4. PHP 完整 configure 參數(含 XPM 路徑)

./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 實現開機自啟

二、 Memcache 服務端與 PHP 擴展安裝

1. 服務端(memcached)

apt-get install memcached
# 啟動
memcached -d -m 128 -p 11211 -u root
# 參數說明:
# -d 守護進程 -m 內存MB -p 端口 -u 用戶(需root)
# 查看端口
netstat -ntlp | grep 11211

memcached 監聽 11211 端口

2. PHP 擴展(memcache)安裝與 phpize autoconf 坑

兩種安裝方式殊途同歸,最終都需 phpize 生成 configure:

  • 方式 A:/usr/local/php5.5/bin/pecl install memcache
  • 方式 B:下載源碼 wget https://pecl.php.net/get/memcache-2.2.6.tgz → 解壓 → phpize

報錯: phpize: Cannot find autoconf / automake / libtool。

phpize 缺 autoconf 報錯

解決: 安裝構建工具鏈:

apt-get install autoconf automake libtool m4
# 重新 phpize → configure → make → make install

編譯成功後,php.ini 添加 extension=memcache.so,重啟 PHP-FPM 驗證 php -m | grep memcache。

三、 經驗總結

  1. 依賴順序不可亂:先裝底層庫,再裝上層依賴庫,最後裝 PHP。用 ldconfig 刷新庫緩存。
  2. configure 摘要要看仔細:Support for Xpm library: no 直接預示後續 PHP 編譯會噴錯,現場補齊。
  3. 32/64 位庫路徑差異:/usr/lib/i386-linux-gnu vs /usr/lib/x86_64-linux-gnu,軟鏈接到 /usr/lib 是通用欺騙 configure 的技巧。
  4. phpize 需完整構建工具鏈:autoconf、automake、libtool、m4、pkg-config 缺一不可。
  5. pecl vs 源碼編譯本質相同:pecl 只是自動下載、解壓、phpize、configure、make、install 的封裝腳本,報錯點一樣。

後續優化: 生產環境建議使用 php-fpm 池管理、opcache 加速、redis 替代 memcache(更豐富數據結構、持久化、集群)。

Copyright © Windows教程網 All Rights Reserved