Apache-Httpd

需要為舊版本的 PHP 啟用 gd

  • October 14, 2021

PHP版本是5.6,太老了。使用apt-get install php5-gd將不再起作用。

我可以找到這些gd.so

/usr/lib/php/20151012/gd.so
/usr/lib/x86_64-linux-gnu/libgd.so.3 -- links to 3.0.0 below
/usr/lib/x86_64-linux-gnu/libgd.so.3.0.0

要啟用,我想我必須在,等gd中設置其中之一。mods_available``mods_enabled

我猜我需要gd.so在一個公共位置有一個別名,該別名連結到上述之一,但是放在哪裡,以及連結到哪個?

是否有手動設置的分步指南?

嘗試gd直接安裝,但不再可用:

$ sudo apt-get install php5-gd
Reading package lists... Done
Building dependency tree
Reading state information... Done
Package php5-gd is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source

E: Package 'php5-gd' has no installation candidate

似乎也沒有ppa:ondrej/php,這是最好的選擇。

我們確實有一個現有的 SO,所以這些是我嘗試修補它的步驟。

找到另一個 SO:

$ locate gd.so
...
/usr/lib/php/20151012/gd.so
...

在 PHP 擴展目錄中創建一個連結20131226到現有的:

$ cd /usr/lib/php/20131226
$ sudo ln -s /usr/lib/php/20151012/gd.so gd.so

為此 SO 創建一個 INI 文件:

$ cd /etc/php/5.6/mods-available
$ echo -e '; configuration for php common module\n; priority=20\nextension=gd.so' | sudo tee gd.ini
; configuration for php common module
; priority=20
extension=gd.so

啟用模組:

$ cd /etc/php/5.6/apache2/conf.d
$ sudo ln -s /usr/lib/php/5.6/mods-available/gd.ini 20-gd.ini

重啟 Apache 看看會發生什麼:

$ sudo service apache2 restart
$ cat /var/log/apache2/error.log
...
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php/20131226/gd.so' - /usr/lib/php/20131226/gd.so: undefined symbol: zend_list_close in Unknown on line 0
...

是的,沒用,但看起來它找到了它並試圖載入它。撤消一切並重新啟動以確保一切恢復正常:

$ cd /etc/php/5.6/apache2/conf.d
$ sudo rm 20-gd.ini
$ cd /etc/php/5.6/mods-available
$ sudo rm gd.ini
$ cd /usr/lib/php/20131226
$ sudo rm gd.so
$ sudo service apache2 restart

唯一的解決方案是建議升級到更高版本的 PHP!

引用自:https://unix.stackexchange.com/questions/673214