如何调试和记录PHP OPcache问题

Nik*_*a 웃 9 php debugging opcache

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

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

ERR_CONNECTION_RESET

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

我到处寻找有关如何调试导致OPcache失败的原因(以及原因)的一些信息,因为关闭它不是一个解决方案,但找不到任何有用的东西(也检查过类似的SO问题,比如这个也没有因此,我正在向专家们寻求帮助,我相信这也将有助于其他人.

谢谢.

PS注意一个很长的手动试错后,我能找到的文件在我的PHP应用程序,它是造成OPcache失败/崩溃,并列入黑名单在OPcache php.ini配置该文件(也降低了它的大小工作得很好,所以我怀疑问题是内部的实际代码),但我仍然在寻找一种简单的方法来调试这些问题,而无需检查和检查服务器上的每个文件.我也不知道它为什么会失败,所以找到失败的原因将有助于向OPcache开发人员提交bug报告.

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

<?php

global $_LANGADM;
$_LANGADM = array();

$_LANGADM['AdminAddressesd3b206d196cd6be3a2764c1fb90b200f'] = 'Delete selected';
$_LANGADM['AdminAddressese25f0ecd41211b01c83e5fec41df4fe7'] = 'Delete selected items?';
Run Code Online (Sandbox Code Playgroud)

TL; DR

我在寻找:

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

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

简单来说 - 我们怎么知道OPcache失败时何时,何地以及为什么会失败,因为没有任何报告/日志就像在大海捞针一样,尤其是当OPcache失败时,即使Xdebug似乎没有记录或输出任何内容, 由于某些原因.

再次感谢

Geo*_*rge 1

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

您可以将以下内容添加到脚本中以暂时禁用 opcache。

ini_set('opcache.enable', 0);
Run Code Online (Sandbox Code Playgroud)

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

如果没有有关您尝试调试的应用程序的更多信息,这将变得更加困难。您可以首先确保错误显示已打开。

ini_set('display_errors', 1); error_reporting(~0);
Run Code Online (Sandbox Code Playgroud)

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

Xdebug 的(远程)调试器允许您检查数据结构,交互式地浏览并调试代码(来自https://xdebug.org/docs/remote)。