【问题标题】:PHP Fails on require_oncePHP在require_once上失败
【发布时间】:2012-04-26 05:31:50
【问题描述】:

我有一个 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,或者只是如何重新启用错误报告。将不胜感激;这似乎没有多大意义。

【问题讨论】:

  • 您可以查阅您的服务器日志吗?
  • 你的class文件夹在根目录吗?尝试在课前添加“/”?只是猜测。
  • 可能你的包含路径有问题php.net/manual/en/function.set-include-path.php
  • 最好使用$_SERVER['DOCUMENT_ROOT'] . '/classes/standard/;
  • 这些都是有效的 cmets - 事实证明,在 XAMPP 中运行良好的相对路径并没有很好地转换为 IIS。重新启用 php 错误报告后,我设法找出了这些错误,并更正了它们。似乎文件 IO 从 4.?.? 改变了一点。到 5.3。

标签: php include


【解决方案1】:

启用错误报告:

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

希望这应该可行。

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

【讨论】:

  • 谢谢。这是我希望得到的答案。虽然@Madbreaks 的答案是“一个答案”——但它不是我所问任何问题的答案。我会听取你的建议 Madbreaks,并构建一个 AutoLoad,但与其回答“这就是你应该如何编写代码”,人们可以开始回答真正的问题吗?将“重写你的代码”作为对“我知道这是有效的 php 为什么这个代码不起作用”的响应是非常令人恼火的。不管怎样,谢谢你。至于 Jim D - 这让我回到了我实际的 PHP 错误之上,我现在可以修复几个“无法打开流”。非常感谢。
  • @DigitalJedi805 - 很高兴我能帮上忙! ini_set('display_errors') 位是我通常会根据生产/环境常量切换的东西。这样一来,我就不会笨手笨脚地不小心忘记关掉它。
【解决方案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

虽然它可能会根据您的分布而有所不同。

【讨论】:

    猜你喜欢
    • 2018-05-27
    • 2012-03-27
    • 2014-05-09
    • 2015-01-01
    • 2020-11-07
    • 2014-06-12
    • 2014-10-21
    • 1970-01-01
    相关资源
    最近更新 更多