参考: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便可解决这个问题, 代码会被高速缓存起来, 提高访问速度.