php中opcache的使用詳解

2021-07-06 04:50:24 字數 2742 閱讀 7196

關於opcode快取的概念可以參考鳥哥的文章:

目前為php提供opcode快取的擴充套件有很多,比如:zend opcache,xcache,eaccelerator,apc等等。

為什麼選擇opcache呢?

在該位址可以找到你的開發環境對應的opcache擴充套件:

將如下配置段加入到php.ini檔案中:

zend_extension = "h:/wamp/bin/php/php5.5.12/zend_ext/php_opcache.dll"

#以下配置為php文件中推薦的配置

opcache.enable=1

#是否開啟opcode快取

opcache.memory_consumption=128

#opcache 的共享記憶體大小,以兆位元組為單位

opcache.interned_strings_buffer=8

#用來儲存臨時字串的記憶體大小,以兆位元組為單位。 php 5.3.0 之前的版本會忽略此配置指令

opcache.max_accelerated_files=4000

#opcache 雜湊表中可儲存的指令碼檔案數量上限。

opcache.revalidate_freq=60

#檢查指令碼時間戳是否有更新的週期,以秒為單位。 設定為 0 會導致針對每個請求, opcache 都會檢查指令碼更新,這個配置在下文中會提到

opcache.fast_shutdown=1

#如果啟用,則會使用快速停止續發事件。 所謂快速停止續發事件是指依賴 zend 引擎的記憶體管理模組 一次釋放全部請求變數的記憶體,而不是依次釋放每乙個已分配的記憶體塊。(不太懂)

opcache.enable_cli=1

#opcache 的共享記憶體大小,以兆位元組為單位

詳細配置資訊參見php文件:

修改完ini檔案後重啟伺服器,列印phpinfo()資訊,如果看到如下截圖,就說明opcache安裝成功了。

上圖中的cache hits(快取命中率)對我們來說比較具有參考價值。

test2.php

$a = 'hello test';

echo

$a;

列印結果是hello test。現在修改一下檔案內容:

test2.php

$a = 'hello test2';

echo

$a;

列印結果依舊是hello test。說明該檔案已經經過了opcache快取。一直重新整理該頁面,注意觀察該值什麼時候發生了變化。同時注意phpinfo中快取命中率的資料是否一直在增加。再檢查一下opcache.revalidate_freq的配置引數,就可以看出在opcache.revalidate_freq配置時間段內php不會檢查該檔案是否有更新。

如果想清空opcode快取,可以使用opcache_reset函式,下面是乙個例子:

opcache_reset();
執行**後可以看到phpinfo中快取命中率的資料已經清零。

從前面的測試中,我們可以看出,要生成opcode快取的話,必須有使用者訪問該頁面才行,opcache為我們提供了一種不需要使用者訪問就能預先生成opcode快取的方法opcache_compile_file,下面是乙個例子:

test4.php

opcache_compile_file('test2.php');
現在我們如果檢查test2.php檔案是否已經儲存到opcode快取中去了呢?很簡單,使用opcache_is_script_cached函式即可,下面是乙個例子:

test3.php

var_dump(opcache_is_script_cached('test2.php'));

die();

執行結果為:true

前面提到的opcache_reset函式將會清空所有的opcode快取,如果我們只想清空某個檔案的快取的話可以使用opcache_invalidate函式,下面是乙個例子:

test5.php

var_dump(opcache_invalidate('test2.php', true));
再次執行test3.php,執行結果為:false

還有兩個函式用於獲取opcache的相關資訊,opcache_get_status(獲取快取的狀態資訊),opcache_get_configuration(獲取快取的配置資訊),下面是乙個例子:

test6.php

var_dump(opcache_get_status());

var_dump(opcache_get_configuration());

執行結果:

關於php中opcache的使用就講到這裡,希望對各位有所幫助。

PHP常用的opcache配置

自用 zend extension opcache.so opcache可用記憶體 mb opcache.memory consumption 128 opcache.enable 1 opcache.enable cli 1 zend optimizer 暫存池中字串的佔記憶體總量.單位 mb o...

PHP中strtotime函式使用方法詳解

在php中有個叫做strtotime的函式。strtotime 實現功能 獲取某個日期的時間戳,或獲取某個時間的時間戳。strtotime 將任何英文文字的日期時間描述解析為unix時間戳 將系統時間轉化成unix時間戳 一,獲取指定日期的unix時間戳 strtotime 2009 1 22 示例...

PHP中strtotime函式使用方法詳解

在php中有個叫做strtotime的函式。strtotime 實現功能 獲取某個日期的時間戳,或獲取某個時間的時間戳。strtotime 將任何英文文字的日期時間描述解析為unix時間戳 將系統時間轉化成unix時間戳 一,獲取指定日期的unix時間戳 strtotime 2009 1 22 示例...