Yii2增加opcache命令行清理功能
opcache作為PHP的重要加速功能,可以在生產(chǎn)環(huán)境上大大地提升運行速度。如非極度追求速度需要上CLI類的框架,一般生產(chǎn)環(huán)境開啟opcache即可。
opcache的功能不再敘述,可以參考此文(https://segmentfault.com/a/1190000023731765?utm_source=tag-newest)。
opcache的效果立竿見影,但是有一個很嚴(yán)重的問題。就是php-fpm的緩存,只能在php-fpm運行php腳本進(jìn)行清理。簡單來說,就是必須暴露一個接口進(jìn)行瀏覽器訪問才能清理,而不能在命令行完成。Cli的opcache緩存與fpm的opcache緩存是完全獨立的。下面就簡單介紹一下在YII2如何利用命令行進(jìn)行解決。
在frontend的模塊創(chuàng)建可訪問控制器,定義該控制器只能127.0.0.1(內(nèi)網(wǎng))才能訪問。代碼如下:
講解:這里是使用了REST控制器,并且聲明了reset方法不用權(quán)限驗證即可訪問。
2、在connsole的模塊創(chuàng)建可訪問控制器,使用Curl遠(yuǎn)程訪問frontend的opcache控制器對字節(jié)碼緩存進(jìn)行清理。代碼如下:
講解:實現(xiàn)遠(yuǎn)程訪問的方式有多樣,方法一是curl直接訪問(無需PHP,但是服務(wù)器必須先安裝curl),方法二是使用php的執(zhí)行exec命令,方法三是使用php腳本。
方法一:
優(yōu)點:curl直接訪問運行速度快,例?curl 127.0.0.1/opcache/reset
缺點:要求服務(wù)器必須先安裝curl,并且每次都需要手敲命令行,敲錯是在所難免,或者寫稱sh腳本
方法二:
優(yōu)點:php的執(zhí)行exec命令,執(zhí)行的命令同方法一。也是執(zhí)行速度相對更快,能使用參數(shù)輸入地址,例php yii /opcache/reset (127.0.0.1:xxxx),也可以自定義baseUrl。
缺點:要求服務(wù)器必須先安裝curl,并且方法二的本質(zhì)還是方法一,如果追求速度不如直接用方法一。
方法三:
優(yōu)點:使用yii\httpclient\Client進(jìn)行請求,服務(wù)器是否安裝curl不影響,并且具備配置設(shè)置baseUrl的靈活性,能使用參數(shù)輸入地址,例php?yii?/opcache/reset (127.0.0.1:xxxx)。
缺點:執(zhí)行速度是三種方式重最慢的。
本人最終采用方法三,是感覺竟然采用yii2編寫命令行腳本,還使用exec執(zhí)行的話,那不如直接寫curl的命令,或者sh腳本。采用方法三的方式編寫后,還可以分享給大家使用。
服務(wù)器每次更新代碼后,只需要執(zhí)行php?yii?/opcache/reset即可。如果非80端口,請自行預(yù)配置。但是如果覺得上面的命令行還是太長的話,本人還會寫一層npm的scripts簡化腳本("oc": "php yii /opcache/reset",),直接執(zhí)行npm run oc。
果然懶惰才是促進(jìn)科技發(fā)展的動力(笑)。