Redeclare功能适用于旧服务器,但不适用于新服务器

时间:2012-03-26 20:50:16

标签: php linux apache php4 php-5.2

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

在新服务器上,它将失败并带有预期的结果:

Fatal error: Cannot redeclare function

问题是在旧服务器上它始终重新声明该功能!这里是否使用了PHP设置或特殊用法,使其在一台服务器上运行而在另一台服务器上运行?

谢谢!

编辑仍在努力寻找可行的方法。站点FATAL错误但在该错误点之后执行。

2 个答案:

答案 0 :(得分: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 */....  };

答案 1 :(得分: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 code:2)in / homepages / 26 /d94605010/htdocs/lz/writecodeonline.com/php4/index.php(138):第3行的eval()代码

你必须在这里混合一些东西,所以在调试时更好地了解事实,而不是猜测(是的,我知道有时可能很难,但事实有助于调试,瞄准它们)。

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