究竟是什么导致这个PHP错误? PHP中的错误?

时间:2009-04-28 14:26:46

标签: php debugging

我收到以下错误:

[27-Apr-2009 10:26:06] PHP Fatal error:  Cannot redeclare alphanumeric() (previously declared in /home/iddoc/public_html/lib/common.php:6) in /home/iddoc/public_html/lib/common.php on line 8

请注意:

/home/iddoc/public_html/lib/common.php:6) in 
/home/iddoc/public_html/lib/common.php on line 8

以下是违规行:

function alphanumeric($str) {
    return strtolower(preg_replace("/[^A-Za-z0-9]/",'',$str));
}

在这些行之前只有评论。该文件或其他任何地方的其他任何地方都没有该功能的其他声明。

奇怪,没有?

7 个答案:

答案 0 :(得分:8)

您是否正在使用require_once()将common.php包含在各处?如果您只使用require或include,则会导致此问题。

答案 1 :(得分:4)

您是否使用require / include来引用该文件?包含文件两次时,这是一个常见错误。如果它看到两个声明,即使它们来自相同的文件,PHP也不知道该怎么做。

尝试使用:

include_once('lib/common.php');

答案 2 :(得分:2)

好像你可能不止一次包含了common.php文件。第二次加载会导致错误,因为函数已经加载了。

这是一个奇怪的错误,但一旦找到问题就可能看似合乎逻辑。我建议查看您的包含,或将它们切换为include_once。也许看看在该函数加载之前debug_print_backtrace()输出了什么。

答案 3 :(得分:1)

听起来你已经不止一次地包含了common.php文件。您是否对包含使用include(),require()或require_once()?

答案 4 :(得分:1)

这是前面包含的common.php吗?这可能会导致此错误。

答案 5 :(得分:1)

在PHP中包含代码文件时,应始终使用include_once或require_once。此规则有例外,但如果您不确定,请使用_once版本。唯一可以使用include或require的是当你知道文件将永远不会被包含在同一个程序中时,或者包含的文件不会声明函数(不用if(function_exists()){保护它们{ })。

例如,模板系统是您可能不需要_once版本的极少数用途之一。

答案 6 :(得分:0)

检查递归包含并确保您的块不会多次执行。