php编译称opcode文件,PHP源码保护和性能加速
什么是Opcache?
每一次執行 PHP 腳本的時候,該腳本都需要被編譯成字節碼,而 Opcache 可以對該字節碼進行緩存,這樣,下次請求同一個腳本的時候,該腳本就不需要重新編譯,這極大節省了腳本的執行時間,從而讓應用運行速度更快,同時也節省了服務器的開銷。
Opcache 的執行流程大致如下:
PHP解釋器從文件系統讀取文件、掃描其詞典和表達式、解析文件、創建要執行的計算機代碼(稱為Opcode),最后執行Opcode。每一次請求PHP腳本都會執行一遍以上步驟,如果PHP源代碼沒有變化,則Opcode也不會發生變化。因此,如果將Opcode緩存下來,以后直接訪問緩存的Opcode,可以加快PHP的執行效率。
PHP7之前的Opcache只支持共享內存緩存,不支持文件緩存。PHP7新增了文件緩存功能,在儲存共享內存緩存的同時,可將每個PHP源文件生成的Opcode導出為相應的PHP文件對應的Opcode文件,后綴為.bin。
默認情況下內存緩存的優先級高于文件緩存,當發起PHP腳本請求時,PHP解釋器首先檢查內存緩存中是否存在當前所請求的PHP腳本對應的Opcode,若有,則直接執行。若沒有,則到指定目錄中尋找當前所請求的PHP腳本對應的Opcode文件,若存在相應的Opcode文件,則將該文件導入內存中,執行。否則,說明內存緩存和文件緩存中均不存在相應PHP腳本的Opcode,需要重新解析文件。
聽起來很牛逼,不過怎么使用呢?
一、找到opcache文件
二、配置opcache
;opcachezend_extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20170718/opcache.so
opcache.enable=1
;OPcache 的共享內存大小,以兆字節為單位。opcache.memory_consumption=128
;用來存儲預留字符串的內存大小,以兆字節為單位。?opcache.interned_strings_buffer=8
;哈希表中可存儲的腳本文件數量上限。設置值取值范圍最小值是 200,最大值在 PHP 5.5.6 之前是 100000,PHP 5.5.6 及之后是 1000000。opcache.max_accelerated_files=10000
;opcache不保存注釋opcache.save_comments=0;關閉PHP文件時間戳驗證opcache.validate_timestamps=0;每60秒驗證php文件時間戳是否更新;opcache.revalidate_freq=60
;打開快速關閉, 打開這個在PHP Request Shutdown的時候回收內存的速度會提高opcache.fast_shutdown=1
;注意,PHP7下命令行執行的腳本也會被 opcache.file_cache 緩存.opcache.enable_cli=;設置不緩存的黑名單;opcache.blacklist_filename=/www/server/opcache_blacklist
;設置字節碼保存路徑opcache.file_cache=/www/server/opcache_file_cache
;啟用或禁用在共享內存中的 opcode 緩存。
opcache.file_cache_only=0
三、生成文件緩存
可通過運行腳本或者opcache_compile_file () 函數將php編譯后的機器碼保存在opcache.file_cache目錄下,就可以加速腳本了。
如在項目根目錄文件加上 opcache.php<?phpfunction ?getfiles($path,?&$files?=?array()){
if?(!is_dir($path))?return?null;
$handle?=?opendir($path);
while?(false?!==?($file?=?readdir($handle)))?{
if?($file?!=?'.'?&&?$file?!=?'..')?{
$path2?=?$path?.?'/'?.?$file;
if?(is_dir($path2))?{
getfiles($path2,?$files);
}?else?{
if?(preg_match('%\.php$%',?$file))?{
$files[]?=?$path2;
}
}
}
}
return?$files;}//?獲取指定目錄及其子目錄下的所有PHP文件$files?=?getfiles('/home/wwwroot/website');foreach?($files?as?$file)?{
//編譯PHP文件生成opcode
opcache_compile_file($file);
//清空原來的PHP腳本
file_put_contents($file,?'');}
發布代碼后請求文件使緩存生效
如需保護php源碼則可在緩存機器碼后將網站目錄PHP腳本內容變更為任意內容(不可刪除文件),運行的也是保存在opcache_cache目錄下的機器碼了。
生成的緩存機器碼如下圖:
打開文件內容如下:
四、簡單測試
未開啟 opcache 情況
開啟 opcache 情況
從上面的截圖中就可以看出,未開啟 opcache 的情況下,基本穩定在 70-90 左右,但是開啟 opcache 后,請求基本都穩定在 50ms 左右,所以可以看出提升性能還是很明顯的。
這樣,既保護了你的源碼,又加速了你的應用,趕緊去試一下吧!
總結
以上是生活随笔為你收集整理的php编译称opcode文件,PHP源码保护和性能加速的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python后端框架flask_Vue+
- 下一篇: 动态规划算法php,php算法学习之动态