致命错误:无法重新声明(PHP/Apache安装程序)


Fatal error: Cannot redeclare (PHP/Apache Setup)

我正在Mac(Mountain Lion)上运行Apache2/PHP5 web服务器。当我从Lion升级到Mountain Lion时,我丢失了dev-environment/configs。在尝试设置所有内容的同时,我不知何故破坏了我的httpd或php.ini配置(我想,无论如何)。。。当我将浏览器指向本地主机时,我会得到臭名昭著的PHP错误:

致命错误:无法重新声明(某些随机函数)。

不管我指的是哪一页,我都明白。在我的web服务器设置丢失之前,这并没有发生,所以我相信文件是好的,所有语法都很好(整个网站都一致使用include_one和require_one)。

我认为这与我的虚拟主机设置或工作目录设置有关。。。我试过很多东西,但到目前为止都没有快乐。

我很乐意提供任何/所有有用的信息。。。我对此束手无策。如有任何帮助或建议,我们将不胜感激。

您很可能已经更改了include_path,因此您正在使用不同的路径加载相同的php文件。当您这样做时,php无法判断它是同一个文件,因此它会第二次加载该文件,这会导致Cannot redeclare错误。

追踪问题的一种方法是在违规行之前添加以下内容:

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

致命错误:无法重新声明(某些随机函数)/class

Always意味着具有相同名称的函数或类以前已经定义过,看看这个例子:

<?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

这是你应该从的线索确保:,您的包含路径被相应地设置为

要获得一些线索,请尝试:

<?php
print_r ( get_included_files() );
?>

在我的特殊情况下,它碰巧是一个糟糕的vhosts设置。一旦我在那里修复了一种重定向问题,它就解决了这个问题。

不过,这里提供的其他两个答案(和注释)都非常好,应该可以帮助将来有类似问题的人调试他们的代码。你很少会像我在vhosts上那样犯错,遇到这个问题(但其他很多问题都不会)。非常感谢Ross Smith II、metal_fan和Jeffrey在这方面的帮助!

我刚刚在另一个论坛中解决了这个问题。就我而言,问题在于:<?php include "file.inc"; $user = new user() .... ?><?php include "file.inc" .... ?>我包含了两次"file.inc",这就是问题所在。Juust将include保存在"main"文件中,仅此而已!