看來短時間很難將主機的 PHP 版本升級到 8.1,特別是有 host 一些相依關係特別複雜的網站,像是:WordPress (一堆 plugins),或是 vendor 底下一堆 packages 的專案。
以下提供我自己來檢查伺服器上的專案,是否已經可用 PHP 8.1 來執行的方法 ….
軟體開發和生活瑣事
看來短時間很難將主機的 PHP 版本升級到 8.1,特別是有 host 一些相依關係特別複雜的網站,像是:WordPress (一堆 plugins),或是 vendor 底下一堆 packages 的專案。
以下提供我自己來檢查伺服器上的專案,是否已經可用 PHP 8.1 來執行的方法 ….
編譯 PHP 時遇到錯誤訊息:
No package 'oniguruma' found
原因是新版的 PHP regex 改用 oniguruma 函式庫,所以編譯前需要先安裝 libonig-dev。
PHP 是一種直譯式語言,也就是說程式碼開起來以後,讀一行、執行一行,軟體修改後不須重新編譯,直譯器重新再讀取一次即可看到修改後行為上的差異。
這在開發環境是一個非常棒的特性,可以加速開發的迭代速度。但也有缺點,當程式確定要上產品線以後,在正式主機上 PHP 也是讀一行執行一行,每次使用者造訪網頁時都要開啟程式碼讀取一次。
之前在 2010 年時,是讓 PHP 搭配 APC 來將讀取過的結果暫存起來,現在 PHP 官方已經內建 OPcache 工具來處理,不用另外安裝工具。OPcache 會將已翻譯過得檔案建立快取,只要程式碼沒有變更過且有快取可用,PHP 就會直接從快取來執行而不重新讀取程式碼,這對產品線上不常更動的程式非常有用。
開啟 php.ini 並找到 [opcache]:
[opcache] opcache.enable = 1 ; 設定為啟動 opcache.memory_consumption = 512 ; 使用 512MB 的記憶體做快取
主要就上面這二個設定,其他的可以看說明再調整。
接下來要注意的就是觀察主機記憶體使用量,千萬不要讓記憶體吃光開始使用 SWAP,不然就會變成沒有開啟 OPcache 那樣慢了。
WebP 影像格式是專為了網路服務設計的格式,可以在一般人肉眼看不出差異的情況下,將影片檔案縮小,並加速網路傳輸速度。PHP 的 GD library 也早已提供格式轉換功能,以下就來介紹使用方法:
<?php $in = "source.jpg"; $out = "NEW.webp"; // 先使用 GD 讀取原始影像 $img = imagecreatefromjpeg($in); // 儲存成 webp imagewebp($img, $out);
謹此而已,沒有想像中的麻煩。
懶得寫網頁小工具轉換,乾脆改成 script 在 console 自動處理,程式碼放在 Gist/johnroyer,有需要的自己拿抓,也歡迎留言許願 XD
RC 很長一段時間以後, PHP 8.1 終於發布了!
功能上的異動可以參考:https://www.php.net/releases/8.1/en.php