在服务器上遇到现象,明明在服务器上已经修改了代码,但就是不生效!?

有可能是因为开启了 OPcache,线上环境为提升性能开启此配置(线上是很有必要的,推荐启用),在开发环境上代码时常发生修改,可以关闭或者缓存时间极短比如 1 秒,避免发生上述情况。

什么是 OPcache

OPcache 通过将 PHP 脚本预编译的字节码存储到共享内存中来提升 PHP 的性能,存储预编译字节码的好处是: 省去了每次加载和解析 PHP 脚本开销。

PHP 5.5.0 及后续版本中已经绑定了 OPcache 扩展,对于 PHP 5.2 ~ 5.4 版本可以使用,PECL 扩展中的 OPcache 库。

怎么安装OPcache

PHP 5.5.0 及后续版本

OPcache 只能编译为共享扩展,如果你使用 --disable-all 参数,禁用了默认扩展的构建,那么必须使用 --enable-opcache 选项来开启 OPcache,编译之后就可以使用 zend_extension 指令来将 OPcache 扩展加载到 PHP 中。

类 Linux 系统

zend_extension=/full/path/to/opcache.so

Windows 系统

zend_extension=C:\path\to\php_opcache.dll

PHP 5.2 ~ 5.4 版本

PECL 扩展未与 PHP 捆绑,安装此 PECL 扩展相关的信息,可在手册中标题为 PECL 扩展的安装章节中找到,更多信息如新的发行版本、下载、源文件、维护人员信息及变更日志等,都在此处:http://pecl.php.net/package/ZendOpcache

PECL 扩展的 DLL 当前不可用

php.ini 推荐配置

开发环境

opcache.validate_timestamps = 1; // 开启时间戳验证,这样 OPcache 会检查脚本是否有更新
opcache.revalidate_freq = 1;     // 设置检查脚本更新的频率(以秒为单位),配置 1 秒检查一次脚本变化

生产环境

opcache.validate_timestamps = 1; // 开启时间戳验证,这样 OPcache 会检查脚本是否有更新
opcache.revalidate_freq = 60;    // 设置检查脚本更新的频率(以秒为单位),配置 60 秒检查一次脚本变化