日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php编译称opcode文件,PHP源码保护和性能加速

發布時間:2023/12/10 php 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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源码保护和性能加速的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。