我真的不知道我做了什么导致这个异常,但我推断出这个问题的发生只是因为我包含了一个PHP脚本。这是它抛出的错误:
[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
实际上并没有运行任何代码,它只是定义了函数。现在这就是为什么它很奇怪:当我在core.php
中包含home.php
时,它会抛出上面的异常。在任何其他文件中包含core.php
不会导致错误。
我对PHP非常好,但我不知道发生了什么。谢谢你的帮助。
答案 0 :(得分:4)
将您的include
更改为include_once
或require_once
。
问题是您多次调用/包含一个包含函数的文件。抛出致命错误以防止函数被定义两次。
<强>解释强>
通过使用* _once,PHP将仅在执行脚本期间包含指定的文件一次。 PHP不支持方法重载(在类范围之外),因为它具有动态特性。像Java这样的语言支持重载/覆盖方法。
假设您有一个名为home.php,about.php和sidebar.php的文件。所有三个文件都调用另一个文件database.php,该文件有一个名为dbhandler()的函数。
已经定义了dbhandler()。如果调用home.php,它引用sidebar.php,那么将调用database.php两次。使用include_once / require_once,如果尚未调用,则只包含database.php。
希望这有帮助。
答案 1 :(得分:1)
这意味着已加载core.php
,例如,某些其他文件包含它,home.php
包含该文件将导致此问题。为防止出现这种情况,您可以使用include_once
或require_once
来确保文件仅包含一次。或者您可以确保只包含一次文件。