2012-07-28 109 views
0

我正在Mac(Mountain Lion)上運行Apache2/PHP5 Web服務器。當我從Lion升級到Mountain Lion時,我失去了我的開發環境/配置。雖然試圖設置一切,我不知怎的borked我的httpd或php.ini配置(我想,無論如何)...當我點我的瀏覽器到我的localhost,我得到臭名昭着的PHP錯誤:致命錯誤:無法重新聲明(PHP/Apache安裝程序)

致命錯誤:無法重新聲明(一些隨機函數)。

無論我指向哪個頁面,我都會得到它。在我的網絡服務器設置丟失之前,這並沒有發生,所以我確信文件沒問題,所有語法都很好(整個網站一直使用include_once和require_once)。

我認爲這與我的虛擬主機設置或工作目錄設置有關......我嘗試過很多事情,但目前爲止沒有任何喜悅。

我很高興提供任何/所有的信息,這將是有用的......我在我的智慧結束。任何幫助或建議將不勝感激。

+3

嘗試'<?php phpinfo(); ?>文件。那樣有用嗎? – Ryan 2012-07-28 02:20:38

回答

0

在我的具體情況,這正好是一個壞的虛擬主機設置。一旦我在那裏修復了一個重定向問題,它就解決了這個問題。

雖然這裏提供的其他答案(和評論)都非常好,並且在未來應該可以幫助任何有類似問題的人調試他們的代碼。你很少會像我對虛擬主機那樣瘋狂並遇到這個問題(但不是其他許多問題)。非常感謝Ross Smith II,metal_fan和Jeffrey在這方面的幫助!

2

你很可能已經改變了你的include_path,所以你使用不同的路徑加載相同的php文件。當你這樣做,PHP不能告訴它是相同的文件,所以它再次加載文件,這導致了Cannot redeclare錯誤。

一來追蹤問題的方法是有問題的行之前添加下列權利:

echo "<pre>"; 
print_r(explode(PATH_SEPARATOR, get_include_path())); 
print_r(get_included_files()); 
1

Fatal error: Cannot redeclare (some random function)/class

總是意味着該函數或類具有相同的名稱之前已經定義, 取看看這個例子:

<?php 


function test(){ 
return 1; 
} 

function test(){ 
return 2; 
} 
//will produce fatal error like yours 


class A {} 
class A {} 
//Will say that it can't redeclare class A 

下面是你應該從 啓動線索確保:,你的include路徑相應設置

爲了得到一些線索,請嘗試:

<?php 

print_r (get_included_files()); 

?> 
+0

是的,情況是這樣,但問題不在它的項目中,它在Apache中。你只是給出了錯誤的線索,你沒有提供解決它的答案。 – Shoe 2012-07-28 02:39:28

+0

但是 - 它說'PHP:致命的錯誤不能重新聲明...'那麼我們有什麼?1)該文件(包含函數/類)已被列入前,用戶也包括這一項,通過包括()不include_once()的2)get_included_files()將有助於確定該文件是需要包括 – Yang 2012-07-28 02:46:06

+0

作者應該提供更多信息,我同意你的意見。但這個錯誤並不是作者的錯。這可能是一些Apache類,包含2次並運行兩次。所以,你可以給出最好的建議是做一個新的乾淨的安裝服務器和清潔apache的文件夾。運行'get_included_files()'會給他,他在內,而不是Apache的文件。 – Shoe 2012-07-28 02:52:07

0

我剛剛解決了這個問題,看在另一個論壇。 在我的情況下,問題是: <?php include "file.inc" .... ?> 我包含兩次「file.inc」,這就是問題所在。 Juust將include包含在「主」文件中,這就是全部!

相關問題