PHP - 需要调试
Posted
技术标签:
【中文标题】PHP - 需要调试【英文标题】:PHP - Debugging Require 【发布时间】:2012-09-18 23:54:30 【问题描述】:我在使用 require
或 require_once
时遇到了一些问题,因为代码在调用后会停止执行,我正在努力寻找到底是什么导致了问题。
我已经检查了文件是否存在并且可以读取(通过file_exists
和is_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
更新
检查file1
和file2
是否定义了同名的函数,或者有其他不兼容的逻辑。
【讨论】:
感谢您的建议,但是服务器上的另一个文件以完全相同的方式使用 file2 没有问题,这有点令人困惑。 file2.php 在通过 PHP lint (php -l) 时也不会返回任何错误。 谢谢,但情况并非如此,因为另一个文件(在不同的目录中)以相同的方式同时使用 file1 和 file2。 同样注释掉第一个要求也没什么区别。以上是关于PHP - 需要调试的主要内容,如果未能解决你的问题,请参考以下文章