首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只有在git推送之后才重新验证opcache

只有在git推送之后才重新验证opcache
EN

Stack Overflow用户
提问于 2015-01-18 19:15:13
回答 1查看 740关注 0票数 6

我在OPcache中使用PHP。我只想掌握在生产中部署我的网站(并不是真的,只是在单元测试之后,但没关系)。在php.ini文件中,OPcache设置大约是“时间”和“频率”。但我只想在git拔出我的服务器后重新设置缓存。

因此,我想我只需要在git-拉我的生产服务器之后调用opcache_reset,并将opcache.validate_timestamps设置为0 (永不重置缓存)。

我没有读到任何关于那方面的东西,所以我怀疑:我不知道这是否是一个好的练习。我错过了什么吗?有风险吗?好吗?

非常感谢!

P.S.:我使用的是PHP和composer (composer install在git-pull之后运行)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-22 17:16:39

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

然而,有几个“陷阱”:

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

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

代码语言:javascript
复制
<?php

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

并在每次代码提取时执行该文件。取决于PHP的版本和运行方式,这可能只会清除命令行的缓存,而不会清除运行中的web版本。

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28013726

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档