我们看到了一个奇怪的问题,我一直在努力解决。
每隔一段时间,我们就会将错误部署到我们的服务器上,其中一台服务器会开始将错误流到日志中,
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中被重新读取是可能的(作为部署的一部分,我们从一个文件夹r同步到"live”文件夹)。然后,我们禁用了"validate_timestamps“,并在代码完全同步后执行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谢谢
发布于 2017-08-02 00:31:05
这个问题看起来和下面的PHP bug类似,
https://bugs.php.net/bug.php?id=71135
我们在部署时重新启用"validate_timestamps“和,而不是 opcache_reset()。希望这能解决这个问题。
https://stackoverflow.com/questions/45411019
复制相似问题