仅在git push之后重新验证opcache

时间:2015-01-18 19:15:14

标签: php git optimization composer-php opcache

我正在使用PHP和OPcache。我只是git-push掌握在生产中部署我的网站(不是真的,它只是在单元测试之后,但没关系)。在php.ini文件中,OPcache设置约为" time"和"频率"。但我只想在我的服务器上git pull之后重置缓存。

所以我想我只需要在生产服务器上的git-pull之后调用opcache_reset并将opcache.validate_timestamps设置为0(从不重置缓存)

我没有读过任何关于这种方式的内容,所以我怀疑:我不知道这是不是一个好习惯。我错过了什么?有风险还是没问题?

非常感谢!

P.S。 :我正在使用PHP框架和作曲家(composer install在git-pull之后运行)

1 个答案:

答案 0 :(得分:2)

为了从OPCache中获得最大收益,您应该禁用opcache.validate_timestamps。如果您每次将代码部署到服务器时随后从脚本中调用opcache_reset(),那么对于每个新文件集,您的OPCache将被清除一次,并且系统不会浪费资源不断检查文件。

然而,有几个“陷阱”:

首先,确保调用opcache_reset(),否则您将运行旧代码。如果您有一个脚本来执行部署,请确保在未执行此步骤时大声失败。

其次,根据PHP的运行方式(mod_php vs php-fpm),您可能需要通过对浏览器的请求执行opcache_reset()函数,而不是通过命令行。例如,清除缓存的最明显的解决方案是拥有一个简单的PHP文件,如下所示

<?php

if (php_sapi() != "cli") die("Not accessible from web");
opcache_clear();

并在每个代码拉上执行该文件。根据PHP的版本及其运行方式,可能仅清除命令行的缓存而不清除正在运行的Web版本。

如果从命令行清除不起作用,请考虑创建一个类似的脚本,并使用curlwget通过网络调用它。例如,curl http://example.com/clear_cache.php?secret=abc123。如果您创建的脚本可以通过Web访问,那么请确保它检查密钥以防止有人通过不断清除缓存来加载您的服务器。

最后,正如其他人所建议的那样,为了使您的构建在测试和部署之间完全可重复,请考虑让测试过程结束时创建用于测试的整个代码的.zip文件,包括下拉的库作曲家。而不是服务器上的git pull,只需将文件解压缩到代码根目录即可。我意识到git pull && composer update很容易。但是,正如其他人所建议的那样,如果在运行时间测试和部署时间之间更新库,那么您的代码可能不再按预期工作。