發表文章

目前顯示的是有「php」標籤的文章

升級 PHP 8/8.1 後值得調整的一些新寫法

圖片
升級 PHP 8/8.1 後,用 PHP CS Fixer 的 Migration 系列 rule set,看看原本專案內哪些部分有新的寫法,整理一篇記錄一下。 更直覺的 str_contains 和 str_starts_with 相關規則: modernize_strpos 以往我們常使用 strpos 來檢查指定字串是否有包含另一個字串,或者用它來判斷字串的開始: if ( strpos ( 'Foo Bar Baz' , 'Foo' ) !== false ) { echo 'Found' ; } if ( strpos ( 'Foo Bar Baz' , 'Foo' ) === 0 ) { echo 'Start with Foo' ; } 現在有簡單的 str_contains 和 str_starts_with 了,可讀性更佳: if ( str_contains ( 'Foo Bar Baz' , 'Foo' ) ) { echo 'Found' ; } if ( str_starts_with ( 'Foo Bar Baz' , 'Foo' ) ) { echo 'Start with Foo' ; } 更方便的 ::class magic constants 相關規則: get_class_to_class_keyword 以往 ::class 只能用在 Class 名稱後方,想要從 object 取得 Class 名稱需要使用 get_class 。 $object = new ClassName ( ) ; echo get_class ( $object ) ; 現在可以直接使用在 object 上了: $object = new ClassName ( ) ; echo $object : : class ; 更好讀的八進位數字 相關規則: octal_notation PHP ...

[筆記] 延長 PHP-FPM 和 NGINX 執行時間上限

Laravel 或是一般 PHP 專案上常會遇到執行時間超時的問題, 例如遇到了 PHP 超過執行時間上限的錯誤: 'production.ERROR: Maximum execution time of 30 seconds exceeded' 或是遇到 NGINX 的超時錯誤: '504 Gateway Time-out' 是因為 PHP 和 NGINX 預設最長執行時間都是 30 秒,我們可以修改設定來延長它們。這裡我們延長到 Apache、IIS 慣例的 5 分鐘。 這個主題其實很多人寫了,但是資訊有點零散,乾脆自己再寫一篇方便以後找。 (感覺就是很常會改啊) PHP: 延長 max_execution_time PHP 的 runtime 設定中的 max_execution_time 參數可以指定腳本被 parser 中止之前允許的最大執行時間,預設值是 30 秒。我們可以透過修改 php.ini 指定為 300 秒。 修改 php.ini 以 PHP 7.2 為例,php.ini 的位置預設是在 /etc/php/7.2/cli/php.ini 。php.ini 的位置可以經由 php -i 指令查詢的到。順帶一提,PHPBrew 使用者可以透過 phpbrew config 指令直接開啟當前版本對應的 php.ini。 ; /etc/php/7.2/cli/php.ini ;;;;;;;;;;;;;;;;;;; ; Resource Limits ; ;;;;;;;;;;;;;;;;;;; ; Maximum execution time of each script, in seconds ; http://php.net/max-execution-time ; Note: This directive is hardcoded to 0 for the CLI SAPI max_execution_time = 300 重新啟動 PHP-FPM 修改完成後,需要重新啟動 PHP-FPM。 PHPBrew 使用者 phpbrew fpm restart Ubuntu/Debian 系 sudo service php7.2-fpm res...