參考:http://www.laogui.com/Zend-Opcachephp
你們知道目前PHP的緩存插件通常有三個:APC、eAccelerator、XCache,但將來它們可能都會消失,由於PHP 5.5已經集成Zend Opcache,功能和前三者類似但又有少量不一樣,緩存速度聽說比它們更快(注意:只是聽說,我沒測試過)。
這幾個PHP加速插件的主要原理都相同,就是把PHP執行後的數據緩衝到內存中從而避免重複的編譯過程,可以直接使用緩衝區已編譯的代碼從而提升速度,降 低服務器負載,它們的效率是顯而易見的,像drupal這種龐大的CMS,每次打開一個頁面要調用數十個PHP文件,執行數萬行代碼,效率可想而知,在安 裝APC等加速器後打開頁面的速度明顯加快。
Zend Opcache 已經集成在了PHP 5.5裏面,編譯安裝PHP5.5的時候加上--enable-opcache就好了。但也支持低版本的 PHP 5.2.*, 5.3.*, 5.4.*,將來會取消對5.2的支持,下面是我在PHP 5.4下的安裝方法:
依次執行下面的命令
wget http://pecl.php.net/get/zendopcache-7.0.2.tgz
tar xzf zendopcache-7.0.2.tgz
cd zendopcache-7.0.2
phpize
若是找不到phpize 的話本身找PHP路徑,個人在/usr/local/php/bin/phpize,下面這行也要按你的php.ini路徑自行修改
./configure --with-php-config=/usr/local/php/bin/php-config
make
make install
css
若是顯示Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-zts-20100525/ 表示安裝完成,下面要修改php的配置文件讓它生效
html
PHP5.3.27 的擴展php_opcache.dlllinux
測試平臺:Windows 2008 R2 x64 (IIS7.5 FastCGI,Apache2.2.23,Apache2.4.3, Nginx 1.2.9)git
包含 Non Thread Safe 和 Thread Safegithub
若是用的是 FastCGI 請使用 Non Thread Safe 版web
php_opcache.dll 的使用方法apache
在 php.ini 的最後面加入下面幾行瀏覽器
[opcache]緩存
zend_extension = "D:\phpecorg\PHP\ext\php_opcache.dll"
//或 linux下:zend_extension=/usr/local/php/lib/php/extensions/no-debug-zts-20100525/opcache.so
opcache.enable = 1
opcache.enable_cli = 1
opcache.memory_consumption = 256
opcache.interned_strings_buffer = 8
opcache.max_accelerated_files = 4096
opcache.max_wasted_percentage = 5
opcache.validate_timestamps = 1
opcache.revalidate_freq = 60
opcache.fast_shutdown = 1
opcache.optimization_level = 0xffffffff
128意思是給它分配128M內存,而後重啓apache,用phpinfo查看是否生效,顯示下面的信息就說明生效了
在phpinfo頁面的下面能夠看到的運行狀態
若是嫌這個不直觀能夠裝個PHP文件查看,地址在https://gist.github.com/ck-on/4959032,把上面的代碼保存爲一個php文件放到你的網站目錄下面打開就能夠看到:
命中率100%。
Zend Opcache由於最近纔出來,如今仍是測試版,相信在將來幾年會愈來愈流行,如今真沒多少人用。目前測試來看還比較穩定,我已經在 vbulletin論壇下運行了幾天,不過沒看出和APC、xcache有啥區別,只是最近個人APC老讓apache崩潰(多是apache和php版本太新的緣由),想換個試試,畢竟Zend Opcache和APC都是php官方的,值得信賴。
從新啓動apache, 打印phpinfo();信息後, 便可找到Zend OPcache信息. 如圖片
在phpinfo()信息中, 目前來看有兩條信息猶爲重要:
Cache hits (高級緩存命中)
Cache misses (高級緩存未命中)
在這兩條信息中便可觀察緩存運行狀況, 一目瞭然
高速緩存帶來哪些優化呢? 對代碼運行有多大幫助?
咱們作個測試, 驗證一下什麼是opcache.
< ?php
echo ‘opcache';
?>
這是一段很是簡單的php代碼, 請保存爲demo.php文件而後訪問, 隨意刷新, Cache hits數值會不停地增長, 說明起做用了,
而後你修改代碼爲:
< ?php
echo ‘cache new';
?>
再刷新demo.php, 應該能夠看到效果, 打印出來的值仍然是opcache, 即源碼被緩存了, 它再也不解析demo.php文件, 試着不停地刷新, 檢測多少秒後才更新.
可設置: opcache.force_restart_timeout=180 的時間來控制更新速度.
這 就相似於web項目中的靜態文件緩存一下, 好比咱們加載一個網頁, 瀏覽器會自動幫咱們把jpg, css緩存起來, 惟獨php沒有緩存, 每次均須要open文件, 解析代碼, 執行代碼這一過程, 而opcache便可解決這個問題, 代碼會被高速緩存起來, 提高訪問速度.