2

我正在将 PHP 5.2.x 应用程序迁移到新的 5.2.x 服务器。旧服务器实际上是在多年前作为 PHP 4.0 服务器开始的,并且随着时间的推移升级到 PHP 5.2。我们的一个模块有一个函数,如果这个模块被多次使用,它会被重新声明。我们可以很容易地解决这个问题,但我们对它如何工作感到困惑。

在新服务器上,它将失败并出现预期:

Fatal error: Cannot redeclare function

问题是在旧服务器上它总是重新声明函数!此处是否使用了 PHP 设置或特殊用法,使其可以在一台服务器上运行,但不能在另一台服务器上运行?

谢谢!

编辑仍然试图通过这是如何可能的倾诉。该站点 FATAL 错误,但在该错误点之后执行。

4

2 回答 2

1

重新声明函数被认为是错误的。

也许你们可以使用“重命名功能”。

http://es.php.net/manual/en/function.rename-function.php

if(function_exist("foo")){
  rename_function('foo', 'old_foo' );

  function foo(){
        /*...*/
  }
}

另一个想法是重写代码来做到这一点

$foo = function(){  /* something */....  };

所以下次你想重新定义 $foo() 时,你做

$foo = function(){  /* something else */....  };
于 2012-03-28T11:47:45.667 回答
0

我无法重现您的描述,PHP 4 不允许您重新声明函数:

echo PHP_VERSION;
function foo() {}
function foo() {}

演示/输出:

4.4.9
致命错误:无法重新声明 foo()(之前在 /homepages/26/d94605010/htdocs/lz/writecodeonline.com/php4/index.php(138) 中声明:eval()'d 代码:2)在 / homepages/26/d94605010/htdocs/lz/writecodeonline.com/php4/index.php(138):第 3 行的 eval() 代码

你必须在这里混合一些东西,所以最好在调试时找出更多关于事实的信息,而不是猜测(是的,我知道有时可能很难,但事实在调试时会有所帮助,瞄准它们)。

如果这是一个致命错误,你的脚本就会结束。您可以添加关闭回调函数来进一步调试您的问题,请参阅相关问题:

于 2012-06-22T10:39:24.623 回答