0

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

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

不管我指向哪个页面,我都明白了。在我的网络服务器设置丢失之前,这并没有发生,所以我确信文件没问题并且所有语法都很好(整个站点也始终使用 include_once 和 require_once)。

我认为这与我的虚拟主机设置或工作目录设置有关......我已经尝试了很多东西,但到目前为止还没有任何乐趣。

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

4

4 回答 4

2

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

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

echo "<pre>";
print_r(explode(PATH_SEPARATOR, get_include_path()));
print_r(get_included_files());
于 2012-07-28T02:25:47.670 回答
1

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

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() );

?>
于 2012-07-28T02:29:32.680 回答
0

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

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

于 2012-08-08T20:50:30.773 回答
0

我刚刚在另一个论坛中解决了这个问题。就我而言,问题在于: <?php include "file.inc"; $user = new user() .... ?> <?php include "file.inc" .... ?> 我包含了两次“file.inc”,这就是问题所在。只需将包含保留在“主”文件中即可!

于 2013-01-04T03:06:04.807 回答