2012-06-19 46 views
0

我真的不知道我做了什麼來引起這個異常,但我推斷這個問題的發生只是因爲我包含了一個PHP腳本。下面是它引發錯誤:由於include引起的令人費解的異常()

[Tue Jun 19 01:33:28 2012] [error] [client 127.0.0.1] PHP Fatal error: Cannot redeclare sql_connect() (previously declared in core.php:6) in core.php on line 9 

這裏是sql_connect()

function sql_connect(){ 
    $a = mysql_connect("localhost", "user", "pass") or die(json_encode(array("failure"=>"SQL CON FAILURE: ".mysql_error()))); // Line 6 
    mysql_select_db("whoSync", $a); 
    return $a; 
} //Line 9 

更多的背景:core.php實際上沒有運行任何代碼,它僅僅定義功能。現在這就是爲什麼它很奇怪:當我在home.php中包含core.php時,它會拋出上面的異常。包括core.php在其他任何文件中將會出現而不是導致出錯。

我對PHP非常好,但我不知道發生了什麼。謝謝你的幫助。

+0

你能告訴你正在使用哪個PHP版本嗎? – hakre

回答

4

將您的include更改爲include_oncerequire_once

問題是您正在多次調用/包含一個包含函數的文件。引發致命錯誤以防止函數被定義兩次。

說明:

通過使用* _once,PHP將只包括腳本的執行過程中指定的文件一次。由於PHP的動態特性,PHP不支持方法重載(在類作用域之外)。像Java這樣的語言支持Overloading/Overriding方法。

假設您有一個名爲home.php,about.php和sidebar.php的文件。所有這三個文件都調用另一個文件database.php,它具有一個名爲dbhandler()的函數。

dbhandler()已經被定義。如果home.php被調用,並且它引用sidebar.php,那麼database.php將被調用兩次。使用include_once/require_once,如果尚未被調用,將只包含database.php。

希望這會有所幫助。

+0

工作。你有這個解釋嗎? – nkcmr

+2

已更新的答案。 –

1

這意味着core.php已經加載,例如,其他文件包含它,並且home.php包含該文件將導致此。爲防止出現這種情況,您可以使用include_oncerequire_once來確保文件只包含一次。或者你可以確保只包含一次文件。