虽然是老生常谈,还是想在此记录一下。 之前在开发环境的服务器上也遇到过此问题,为何明明在服务器上已经修改了代码,但就是不生效!? 有可能就是因为开启了OPcache,线上环境为了加速PHP性能(线上开启此扩展是很有必要的),开启了此配置,然而在开发环境上代码时常发生修改,需要注意这个配置(开发环境甚至可以关闭),以避免发生上述问题。
代码语言:javascript复制什么是OPcache
OPcache 通过将 PHP 脚本预编译的字节码存储到共享内存中来提升 PHP 的性能,存储预编译字节码的好处就是: 省去了每次加载和解析 PHP 脚本的开销。
PHP 5.5.0 及后续版本中已经绑定了 OPcache 扩展。 对于 PHP 5.2,5.3 和 5.4 版本可以使用 » PECL 扩展中的 OPcache 库。
怎么安装OPcache
PHP 5.5.0 及后续版本
代码语言:javascript复制OPcache 只能编译为共享扩展。 如果你使用 --disable-all 参数 禁用了默认扩展的构建, 那么必须使用 --enable-opcache 选项来开启 OPcache。
编译之后,就可以使用 zend_extension 指令来将 OPcache 扩展加载到 PHP 中。在非 Windows 平台使用 zend_extension=/full/path/to/opcache.so, Windows 平台使用 zend_extension=C:pathtophp_opcache.dll。
PHP 5.2, 5.3 和 5.4 版本
代码语言:javascript复制此 » PECL 扩展未与 PHP 捆绑。
安装此 PECL 扩展相关的信息可在手册中标题为 PECL 扩展的安装章节中找到。更多信息如新的发行版本、下载、源文件、 维护人员信息及变更日志等,都在此处: » http://pecl.php.net/package/ZendOpcache.
PECL 扩展的 DLL 当前不可用。
代码语言:javascript复制php.ini推荐配置
开发环境:
opcache.validate_timestamps = 1; // 检查php脚本有发生变化 0:不检查, 1:检查
opcache.revalidate_freq = 0;
生产环境:
opcache.validate_timestamps = 0; // 检查php脚本有发生变化 0:不检查, 1:检查 (设置0之后,每次执行代码不检查脚本更新,所以当我们修改 PHP 代码时需要手动清除OPcache: opcache_reset() )
opcache.revalidate_freq = 0; // 由于 validate_timestamps = 0 这个参数就不会被看了,可随意填写。
关键词: * 操作码缓存 * 预编译的字节码 * opcode