仅在git push之后才重新验证opcache

rap*_*2-h 6 php git optimization composer-php opcache

我正在将PHP与OPcache一起使用。我只是git-push掌握将我的网站部署到生产环境中(不是真的,它只是在单元测试之后,但是没关系)。在php.ini文件中,OPcache设置与“时间”和“频率”有关。但是我只想在git pull我的服务器后重置缓存。

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

我没有阅读过有关该方法的任何内容,因此我对此表示怀疑:我不知道这是否是一个好习惯。我错过了什么?有没有风险或可以吗?

非常感谢!

PS:我使用的是PHP框架和作曲器(composer install在git-pull之后运行)

jwr*_*lub 2

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

然而,有一些“陷阱”:

首先,确保调用opcache_reset()发生,否则您将运行旧代码。如果您有一个脚本来执行部署,请确保如果此步骤不执行,它会失败。

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

<?php

if (php_sapi() != "cli") die("Not accessible from web");
opcache_clear();
Run Code Online (Sandbox Code Playgroud)

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

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

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