我们看到一个奇怪的问题,我一直在努力解决。
我们不时地对我们的服务器进行部署,并且一台服务器将按照以下行开始将错误流入日志中,
require_once(): Failed opening required '/var/www/CrrrectPath/Abstract.php'
(include_path='/var/www/') in /var/www/CorrectPath/Object.php on line 2
问题并不总是include()
。有时,方法名称会以相同的方式被破坏(单个字符被另一个字符替换)。
在生产中调试受影响的服务器后,我可以看到文件本身绝对正常。我的直觉是文件的opcache在某种程度上被破坏了。
我们启用了“validate_timestamps”,所以我认为在rsync
中间重新读取文件是合理的(我们从部署文件夹到“live”文件夹的r-sync) 。然后我们禁用了“validate_timestamps”,当代码完全被rsynced时,我们正在执行opcache_reset()
。这个问题确实发生得不那么频繁,但我们仍然看到了事件。
还有其他人遇到过这个问题吗?任何解决方案的建议(除了彻底改变我们的部署方式)?
有关信息,
$ php -v
PHP 7.0.21-1~ubuntu14.04.1+deb.sury.org+1 (cli) (built: Jul 6 2017 09:38:10) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
with Zend OPcache v7.0.21-1~ubuntu14.04.1+deb.sury.org+1, Copyright (c) 1999-2017, by Zend Technologies
由于
答案 0 :(得分:1)
看来这个问题/类似于以下PHP错误
https://bugs.php.net/bug.php?id=71135
我们在部署时重新启用“validate_timestamps”和不执行opcache_reset()
。希望这能解决问题。