gpt4 book ai didi

php - 仅在 git push 后重新验证 opcache

转载 作者:可可西里 更新时间:2023-11-01 13:27:58 24 4
gpt4 key购买 nike

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

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

我没有读过任何关于这种方式的文章,所以我怀疑:我不知道这是否是一种好的做法。我错过了什么?是否有任何风险或是否可以?

非常感谢!

附言: 我正在使用 PHP 框架和 Composer (composer install 在 git-pull 之后运行)

最佳答案

为了从 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();

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

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

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

关于php - 仅在 git push 后重新验证 opcache,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28013726/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com