2012-04-13 70 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

雖然它可能會因您的分佈。