PHP代码在一台服务器上运行,而不是在另一台服

时间:2011-12-21 11:59:00

标签: php

我的开发服务器在PHP 5.3.8上顺利运行我的PHP Web应用程序。

但是,当我将PHP 生产服务器从PHP 5.2.6升级到5.3.8时,我遇到了这个应用程序的几个问题(关于已弃用的函数ereg_replace和丢失{{1}的投诉} settings)迫使我命令回滚到5.2.6。

相同的PHP代码如何在一个5.3.8服务器上正常工作而不在另一个服务器上工作?这种行为的常见原因是什么?有什么建议吗?

4 个答案:

答案 0 :(得分:3)

您的计算机上的错误级别设置不同。

供参考:

  • 不推荐使用ereg_replace,强烈建议不要使用它

  • 每次调用日期/时间函数都会生成一个E_NOTICE timezone无效,和/或E_WARNING消息(如果使用系统) 设置或TZ环境变量

答案 1 :(得分:2)

请在两台服务器上访问php.ini(PHP配置文件)。 找到“; display_errors”行

请在此之后比较以下几行。

这些是可用于三个设置变量的选项:

; display_errors
;   Default Value: On
;   Development Value: On
;   Production Value: Off

; display_startup_errors
;   Default Value: Off
;   Development Value: On
;   Production Value: Off

; error_reporting
;   Default Value: E_ALL & ~E_NOTICE
;   Development Value: E_ALL | E_STRICT
;   Production Value: E_ALL & ~E_DEPRECATED

答案 2 :(得分:1)

PHP是一种不断发展的语言,对于Java或c#也是如此,因此,如果某些函数不被弃用,则必须检查文档并相应地更新代码。

此外,您还必须确保两台服务器上的PHP设置相同。

如果您查看ereg_replace文档,则会出现这种模糊:

  

警告此功能自PHP 5.3.0起已废弃。依靠   这个功能非常气馁。

答案 3 :(得分:1)

您是否完全肯定您的开发服务器运行PHP 5.3.8? PHP 5.3.X中不推荐使用所有ereg_*函数,因此您的代码不应在没有任何警告的情况下在PHP 5.3上运行。如果是这样,那很奇怪,因为您的开发服务器应该生成比生产服务器更多的警告(例如E_ALL)。检查php.ini中的错误报告设置。 (display_errorserror_reporting

要实现它,您应该真正搜索ereg_*的任何出现,并用preg_*等效项替换这些表达式。

date.timezone可以在php.ini中设置。在那之后,我看到你的PHP 5.2.6代码不应该在5.3.6上运行的原因。