我正在Mac(Mountain Lion)上运行Apache2 / PHP5 Web服务器。当我从Lion升级到Mountain Lion时,我失去了我的开发环境/配置。虽然试图设置一切,我已经以某种方式borked我的httpd或php.ini配置(我想,无论如何)...当我将我的浏览器指向我的localhost时,我得到臭名昭着的PHP错误:
致命错误:无法重新声明(某些随机函数)。
无论我指向哪一页,我都明白了。在丢失我的Web服务器设置之前,这没有发生,所以我确信文件没问题且所有语法都很好(整个站点也一直使用include_once和require_once)。
我认为这与我的虚拟主机设置或工作目录设置有关...我尝试了很多东西,但到目前为止还没有快乐。
我很乐意提供有用的任何/所有信息......我的机智就此结束了。任何帮助或建议将不胜感激。
答案 0 :(得分:2)
您很可能更改了include_path
,因此您使用不同的路径加载相同的php文件。执行此操作时,php无法告诉它是同一个文件,因此它会再次加载该文件,从而导致Cannot redeclare
错误。
追踪问题的一种方法是在违规行之前添加以下内容:
echo "<pre>";
print_r(explode(PATH_SEPARATOR, get_include_path()));
print_r(get_included_files());
答案 1 :(得分:1)
致命错误:无法重新声明(某些随机函数)/ class
始终表示之前已定义具有SAME名称的函数或类, 看一下这个例子:
<?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() );
?>
答案 2 :(得分:0)
在我的特定情况下,它恰好是一个糟糕的虚拟主机设置。一旦我在那里修复了一种重定向问题,就解决了这个问题。
这里提供的其他答案(和评论)都非常好,并且应该帮助任何有类似问题的人调试他们的代码。你很少会像我对vhosts一样搞砸并遇到这个问题(但不是很多其他人)。非常感谢Ross Smith II,metal_fan和Jeffrey对此的帮助!
答案 3 :(得分:0)
我刚刚在另一个论坛上修复了这个问题。
就我而言,问题在于:
<?php
include "file.inc";
$user = new user()
....
?>
<?php
include "file.inc"
....
?>
我包括两次“file.inc”,这就是问题所在。 Juust将include保留在“main”文件中,这就是全部!