2012-06-19 43 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来确保文件只包含一次。或者你可以确保只包含一次文件。