PHP在require_once上失败

时间:2012-04-13 20:22:54

标签: php include

我有一个包含(或“需要”)一组其他脚本的PHP脚本。这有效地用于导入我的所有类。我遇到的是HTTP 500错误。我逐渐筛选并逐段注释掉代码,以确定它在我的一个文件中的require_once上失败了。

以下是代码:

的index.php:

<?php
require_once("std/classes.php");
?>

和std / classes.php:

<?php
RequireStandards();
RequireAddons();

function RequireStandards( )
{
    $ClassFiles = scandir("classes/standard");

    foreach( $ClassFiles as $ClassFile )
    {
        if( $ClassFile == "." || $ClassFile == ".." )
            continue;

        //require_once("classes/standard/" . $ClassFile );
    }
}

function RequireAddons()
{
    $ClassFiles = scandir("classes");

    foreach( $ClassFiles as $ClassFile )
    {
        if( $ClassFile == "." || $ClassFile == ".." || $ClassFile == "standard" )
            continue;

        //require_once("classes/" . $ClassFile );
    }
}

?>

此代码将按原样运行,但只要我取消注释需求,它就会失败。令我感到奇怪的是,我在这台服务器上有很多其他网站以几乎相同的方式运行。

我觉得好像我以某种方式关闭了我的PHP错误报告......我不知道如何重新开启;因为我刚刚升级到PHP 5.3。如果PHP失败,我通常会在浏览器中看到“无法打开文件”或某些内容。

也许有人可以告诉我为什么这会踢回HTTP 500,或者可能只是如何重新启用错误报告。非常感谢;这似乎没有多大意义。

3 个答案:

答案 0 :(得分:12)

启用错误报告:

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
require_once("std/classes.php");
?>

希望这应该有用。

编辑:如果这确实有效,请记住在将任何内容放入面向公众的实时环境之前关闭显示错误!

答案 1 :(得分:2)

您可以使用error_reporting()函数暂时关闭错误报告,例如显示所有错误,将以下代码放入您的文件中:

error_reporting(E_ALL);

当然,要永久更改它,您应该编辑php.ini文件,并确保启用了error_reporting以及display_errors(至少如果这不是生产环境)。您也可以尝试:

ini_set('display_errors', 1);

如果您在页面上出现致命错误,这可能不起作用。同样,要永久启用此功能,您必须修改php.ini文件。

通常建议您仅在非生产系统上启用display_errors,以便用户不会通过错误消息获取潜在的敏感信息。

在任何一种情况下,您都应该能够在apache错误日志中找到php错误,在ubuntu上这里位于:

/var/log/apache2/error.log

虽然根据您的发行情况而有所不同。

答案 2 :(得分:0)

我建议您查看Autoloading Classes