如何调试和记录 PHP 操作缓存问题



我在Windows 10上使用WAMP,运行PHP 7.2和Apache 2.4

当我打开 OPcache 时,我正在加载的页面在 Chrome 中崩溃并显示以下错误:

ERR_CONNECTION_RESET

我检查了php错误日志和Apache错误日志,找不到报告的任何错误。我试图禁用Xdebug,仍然相同的崩溃并且日志中没有错误。 关闭 OPcache 或切换到 php 7.1 或更低版本可以解决此问题。

我到处寻找有关如何调试导致 OPcache 失败的原因(以及原因(的一些信息,因为关闭它不是解决方案,但找不到任何有用的东西(还检查了类似的 SO 问题,比如这个问题也没有解决方案(,所以我正在联系这里的专家寻求帮助, 我相信这也会对其他人有所帮助。

谢谢。

附言请注意,经过长时间的手动试验和错误,我能够在我的 php 应用程序中找到导致 OPcache 失败/崩溃的文件,并将该文件列入 OPcache php .ini配置中的黑名单(也减小其大小工作正常,所以我怀疑问题是里面的实际代码(,但我仍然在寻找一种简单的方法来调试此类问题,而无需通过并检查每个文件在服务器上。我也不知道为什么它会失败,因此找到失败的原因将有助于向 OPcache 开发人员提交错误报告。

编辑:添加粘贴链接需要将代码添加到问题中。这是粘贴文件的开头:

<?php
global $_LANGADM;
$_LANGADM = array();
$_LANGADM['AdminAddressesd3b206d196cd6be3a2764c1fb90b200f'] = 'Delete selected';
$_LANGADM['AdminAddressese25f0ecd41211b01c83e5fec41df4fe7'] = 'Delete selected items?';

TL;博士

我正在寻找:

1( 一种轻松确定 OPcache 是使脚本失败的扩展的方法,而无需通过手动试验和错误来检查每个扩展(打开/关闭它们,直到找到失败的扩展(。

2( 轻松找到一种方法/日志,显示启用 OPcache 时哪个文件及其失败的原因

用最简单的话来说 - 我们如何知道 OPcache 失败时何时、何地以及为什么失败,因为没有任何报告/日志,就像大海捞针一样,尤其是当 Xdebug 似乎没有记录或输出任何东西时,OPcache 失败,出于某种原因。

再次感谢

1( 一种轻松确定 OPcache 是使脚本失败的扩展的方法,而无需遍历每个扩展并打开/关闭它们,直到找到失败的扩展。

您可以将以下内容添加到脚本中以暂时禁用操作缓存。

ini_set('opcache.enable', 0);

2( 轻松找到一种方法/日志,显示启用 OPcache 时哪个文件及其失败的原因。

如果没有有关您尝试调试的应用程序的更多信息,这更难。您可以从确保错误显示处于打开状态开始。

ini_set('display_errors', 1); error_reporting(~0);

但是,如果这不起作用,我建议使用 Xdebug 调试您的应用程序。

Xdebug的(远程(调试器允许您检查数据结构,以交互方式遍历代码并调试代码(从 https://xdebug.org/docs/remote 开始(。

最新更新