PHP 免重新編譯, 安裝特定模組以 GD 為例

在一些較舊的機器上, 例如運作 PHP 5.6 與 Debian Linux 9, 手動編譯會遇到OpenSSL問題, 但又想增加 Extension 時, 重新編譯總是會出錯, 剛好手上就有這樣的案例, PHP 需要編入 GD Extension, 但重新編譯卡住, 搜尋 Google 後發現 PHP 原始碼安裝檔下的模組也能用安裝 PECL Extension 方式來安裝, 以下為 PHP 5.6.39 加裝 GD 模組範例過程

安裝 GD 需要的函式庫, 包括 JPEG / PNG 圖片處理函式庫
apt-get install libgd-dev libjpeg-dev libpng-dev


前往 PHP 5.6 原始檔解壓縮目錄, 要裝的 Extension 是 GD
cd /usr/local/src/php-5.6.39/ext/gd


執行 phpize
phpize


尋找原先的編譯參數
php-config --configure-options


尋找 php-config 的安裝路徑
whereis php-config

以下為輸出範例
php-config: /usr/local/bin/php-config


設定 PHP 編譯參數, 請確定是在 GD 模組下的目錄(php-5.6.39/ext/gd)
./configure --with-php-config=/usr/local/bin/php-config --with-gd --with-jpeg-dir --with-png-dir

--with-php-config=/usr/local/bin/php-config 意味著之前 PHP 編譯所用的參數, 然後加上新編的 GD 模組 --with-gd --with-jpeg-dir --with-png-dir

編譯
make


GD 的模組完成編譯後, 會放在 php-5.6.39/ext/gd/modules/ 目錄下, 將 gd.so 模組檔案複製到 PHP Extension 目錄下, 如果忘記了可以用以下命令查詢
php -i |grep 'extension_dir'

輸出範例
extension_dir => /usr/local/lib/php/extensions/no-debug-non-zts-20131226 => /usr/local/lib/php/extensions/no-debug-non-zts-20131226


複製新編的 GD 模組到 PHP Extension 目錄
cp ./modules/gd.so /usr/local/lib/php/extensions/no-debug-non-zts-20131226


修改 php.ini
nano /etc/php5/cgi/php.ini

加入 GD 模組, 放在最後即可
extension=gd.so

儲存 php.ini 後, 確認一下 GD 有無載入
php -m


重新啟動 Web Server (例如我愛用的 Lighttpd), 這樣網站應用程式才能使用 GD 圖片處理函數
service lighttpd restart


試著跑 GD 會用到的函數, 應該能正確執行!
2020-08-21 11:14 發佈
文章關鍵字 PHP 模組
還是有重新編譯啊?

除非是要新的模組或者是參數不一樣, 不然在 debian 系統上, 就找相對應的 php-gd 來裝就可以了, 多數常用的模組都應該會有獨立的 .deb 包才對.

Debian 的 CLI 跟 CGI 是分開的, 你改 cgi 的 php.ini 應該不會在 php -m (這是 CLI) 看到才對.
lighttpd 應該只能用 cgi/fastcgi 的方式執行 php, 所以改 php 的東西不需要重跑 lighttpd 才對.
是免全部重新編譯
用安裝包安裝軟體是最好的方式, 如果手動編譯可能會遇上很多麻煩

這次的測試, 只有編譯GD, 過程一下就結束了, 之所以這樣做很不得已, 環境老舊又不想讓它不穩定, 只能用保守方式解決...

我嘗試過砍掉PHP原始檔解壓縮目錄, 重新解壓後用以上方法仍只會編譯出gd.so

因為這台機器是PHP, Lighttpd手動編譯安裝, PHP CLI模式也只抓CGI的php.ini, 這樣很不好, 所以請大家別這樣學, Lighttpd很久沒進步了, 我多改用Nginx

Lighttpd我用socket方式連接PHP, 故重啟Lighttpd方能重載PHP, 這也是很不好的做法, 建議用spawn-fcgi來啟動php-cgi聽在某個port上, 我在新機器上採用Nginx + PHP-FPM是各自管理, 改PHP設定只要重啟PHP-FPM

twu2 wrote:
還是有重新編譯啊?除(恕刪)
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?