PHP - 需要调试

Posted

技术标签:

【中文标题】PHP - 需要调试【英文标题】:PHP - Debugging Require 【发布时间】:2012-09-18 23:54:30 【问题描述】:

我在使用 requirerequire_once 时遇到了一些问题,因为代码在调用后会停止执行,我正在努力寻找到底是什么导致了问题。

我已经检查了文件是否存在并且可以读取(通过file_existsis_readable),但这两个似乎都是真的,所以我有点难过。

require_once('file1.php');
print('a');
$file = 'file2.php';
if (!file_exists($file))  die('file does not exist'); 
if (!is_readable($file))  die('cannot read file'); 
require_once($file);
print('b');

上面的代码只输出'a',后面什么也不输出。

服务器上的另一个文件以相同的方式使用有问题的两个文件,没有问题。

还有什么我可以检查的吗?

任何帮助将不胜感激。

编辑:

设置error_reporting(E_ALL) 不会改变输出。

将文件路径更改为同一目录中的空白文件会将输出更改为“ab”,表明 require 已经工作并表明它们是 file2.php 的问题,但是服务器上的另一个文件成功地使用了这些文件完全相同的方式。

为 file2.php 运行 php -l 不会返回任何错误。

注释掉第一个要求没有区别。

编辑2:

问题与对class_exists 的调用以及5.0 版中与自动加载有关的行为变化有关。有问题的代码是在升级到 5.0 之前编写的。

【问题讨论】:

【参考方案1】:

设置error_reporting(E_ALL) 并尝试包含一个空文件而不是file2.php

也许file2.php 有一些错误导致流程停止

【讨论】:

感谢您的建议。我已经更新了当我执行上述两项操作时会发生什么的问题。更改错误报告似乎没有什么区别,将路径更改为空文件是可行的。但是服务器上的另一个文件成功地使用了这个文件。 也许其他使用该文件的人设置了 file2.php 使用的一些变量,而您却没有 似乎不是这样,它与文件顶部的完全相同的代码一起工作。 file2.php 可以做很多其他检查...比如从哪里执行以及谁需要它...相同的代码没有任何意义 您是对的,是文件中的某些内容导致了问题。注释掉整个文件允许它工作。感谢您的帮助,当我发现问题到底是什么时,我会更新问题。【参考方案2】:

您的file2.php 文件中的某处可能存在错误。您应该启用错误报告:

error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 1);

require_once失败时的错误报告级别将是E_COMPILE_ERROR

更新 检查file1file2是否定义了同名的函数,或者有其他不兼容的逻辑。

【讨论】:

感谢您的建议,但是服务器上的另一个文件以完全相同的方式使用 file2 没有问题,这有点令人困惑。 file2.php 在通过 PHP lint (php -l) 时也不会返回任何错误。 谢谢,但情况并非如此,因为另一个文件(在不同的目录中)以相同的方式同时使用 file1 和 file2。 同样注释掉第一个要求也没什么区别。

以上是关于PHP - 需要调试的主要内容,如果未能解决你的问题,请参考以下文章

如何使用FireFox插件FirePHP调试PHP

PHP 调试工具Xdebug安装配置

PHP调试跟踪之XDebug使用总结

[日常] windows下使用vscode配合xebug调试php脚本

Xdebug开源PHP程序调试器

PHP调试日志方法