編譯 PHP 時遇到錯誤訊息:
No package 'oniguruma' found
原因是新版的 PHP regex 改用 oniguruma
函式庫,所以編譯前需要先安裝 libonig-dev
。
軟體開發、伺服器和生活瑣事
編譯 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
不曉得 GCP Cloud Functions 到底對 PHP 支援多少東西,畢竟很多功能需要安裝 extensions,因此寫個 script 列出環境中可用的 extensions:
<?php var_dump(get_loaded_extensions());
不過很意外得發現幾乎所有 extensions 都可以用:
Array
(
[0] => Core
[1] => date
[2] => libxml
[3] => openssl
[4] => pcre
[5] => sqlite3
[6] => zlib
[7] => bcmath
[8] => bz2
[9] => calendar
[10] => ctype
[11] => curl
[12] => dba
[13] => dom
[14] => enchant
[15] => hash
[16] => fileinfo
[17] => filter
[18] => ftp
[19] => gd
[20] => gettext
[21] => gmp
[22] => SPL
[23] => iconv
[24] => intl
[25] => json
[26] => ldap
[27] => mbstring
[28] => session
[29] => pcntl
[30] => PDO
[31] => standard
[32] => pdo_pgsql
[33] => pdo_sqlite
[34] => pgsql
[35] => Phar
[36] => posix
[37] => Reflection
[38] => mysqlnd
[39] => shmop
[40] => SimpleXML
[41] => soap
[42] => sockets
[43] => pdo_mysql
[44] => exif
[45] => sysvshm
[46] => tidy
[47] => tokenizer
[48] => xml
[49] => xmlreader
[50] => xmlrpc
[51] => xmlwriter
[52] => xsl
[53] => zend-test
[54] => zip
[55] => mysqli
[56] => cgi-fcgi
[57] => Zend OPcache
)
看了 example code,也可以使用 composer,這樣彈性非常大。搞不好可以把一些服務直接搬過去了。