2012-07-28 112 views
0

我正在Mac(Mountain Lion)上运行Apache2/PHP5 Web服务器。当我从Lion升级到Mountain Lion时,我失去了我的开发环境/配置。虽然试图设置一切,我不知怎的borked我的httpd或php.ini配置(我想,无论如何)...当我点我的浏览器到我的localhost,我得到臭名昭着的PHP错误:致命错误:无法重新声明(PHP/Apache安装程序)

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

无论我指向哪个页面,我都会得到它。在我的网络服务器设置丢失之前,这并没有发生,所以我确信文件没问题,所有语法都很好(整个网站一直使用include_once和require_once)。

我认为这与我的虚拟主机设置或工作目录设置有关......我尝试过很多事情,但目前为止没有任何喜悦。

我很高兴提供任何/所有的信息,这将是有用的......我在我的智慧结束。任何帮助或建议将不胜感激。

+3

尝试'<?php phpinfo(); ?>文件。那样有用吗? – Ryan 2012-07-28 02:20:38

回答

0

在我的具体情况,这正好是一个坏的虚拟主机设置。一旦我在那里修复了一个重定向问题,它就解决了这个问题。

虽然这里提供的其他答案(和评论)都非常好,并且在未来应该可以帮助任何有类似问题的人调试他们的代码。你很少会像我对虚拟主机那样疯狂并遇到这个问题(但不是其他许多问题)。非常感谢Ross Smith II,metal_fan和Jeffrey在这方面的帮助!

2

你很可能已经改变了你的include_path,所以你使用不同的路径加载相同的php文件。当你这样做,PHP不能告诉它是相同的文件,所以它再次加载文件,这导致了Cannot redeclare错误。

一来追踪问题的方法是有问题的行之前添加下列权利:

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

Fatal error: Cannot redeclare (some random function)/class

总是意味着该函数或类具有相同的名称之前已经定义, 取看看这个例子:

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

下面是你应该从 启动线索确保:,你的include路径相应设置

为了得到一些线索,请尝试:

<?php 

print_r (get_included_files()); 

?> 
+0

是的,情况是这样,但问题不在它的项目中,它在Apache中。你只是给出了错误的线索,你没有提供解决它的答案。 – Shoe 2012-07-28 02:39:28

+0

但是 - 它说'PHP:致命的错误不能重新声明...'那么我们有什么?1)该文件(包含函数/类)已被列入前,用户也包括这一项,通过包括()不include_once()的2)get_included_files()将有助于确定该文件是需要包括 – Yang 2012-07-28 02:46:06

+0

作者应该提供更多信息,我同意你的意见。但这个错误并不是作者的错。这可能是一些Apache类,包含2次并运行两次。所以,你可以给出最好的建议是做一个新的干净的安装服务器和清洁apache的文件夹。运行'get_included_files()'会给他,他在内,而不是Apache的文件。 – Shoe 2012-07-28 02:52:07

0

我刚刚解决了这个问题,看在另一个论坛。 在我的情况下,问题是: <?php include "file.inc" .... ?> 我包含两次“file.inc”,这就是问题所在。 Juust将include包含在“主”文件中,这就是全部!

相关问题