2012-04-13 44 views
6

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

下面是代码:

的index.php:

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

和性病/ 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失败,我通常会期望在浏览器中出现'couldnt open file'或其他类似的内容。

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

+0

你可以咨询你的服务器日志吗? – miku 2012-04-13 20:25:21

+1

你的课堂文件夹在根目录中吗?尝试在类之前添加“/”?只是一个猜测。 – 2012-04-13 20:25:47

+0

您的包含路径可能存在问题http://www.php.net/manual/en/function.set-include-path.php – 2012-04-13 20:28:29

回答

11

启用错误报告:

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

希望这应该工作。

编辑:如果这确实起作用,记住要关闭显示错误,然后再将任何内容放置在面向公众的环境中!

+0

谢谢。这是我希望得到的答案。虽然@Madbreaks的答案是'答案' - 这不是我问的任何答案。我会接受你的建议Madbreaks,并建立一个AutoLoad,而不是回答'这是你应该如何写你的代码',人们可以开始回答真正的问题?将'重写代码'作为对'我知道这是有效的php为什么不是这个代码工作'的回应是非常令人不安的。不过谢谢你。 至于吉姆D - 这让我回到我的实际PHP错误的顶部,我可以修复几个“未能打开流现在。非常感激。 – DigitalJedi805 2012-04-13 20:36:07

+0

@ DigitalJedi805 - 很高兴能帮到你! ini_set('display_errors')位是我通常基于生产/环境常量切换的。这样,我不会笨拙,不小心忘了关掉它。 – 2012-04-13 20:43:08

0

我建议你看看Autoloading Classes

+0

Downvoter ...为什么? – Madbreaks 2012-04-13 21:11:45

+0

我没有这样做,但可能是因为这不是我问的问题的答案,也不帮助我修复现有的代码,无论我是否遵循最佳实践,该代码都应该可以工作。虽然我很欣赏这个提示,并且已经实施了,但是您可以阅读@Jim D的回答的评论,其中我详细说明了它如何对我的情况没有帮助。 – DigitalJedi805 2012-04-13 21:21:29

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

虽然它可能会因您的分布。