【问题标题】:PHP "failed to open stream" after migration from one server to another, others are Deprecated, why?PHP 从一台服务器迁移到另一台服务器后“无法打开流”,其他服务器已弃用,为什么?
【发布时间】:2013-08-21 06:40:56
【问题描述】:

我将一个运行 ob ubuntu 10.10 服务器的 PHP 网站迁移到另一个 unbutu 12.04 服务器。 现在有些 php 函数已被弃用,有些函数找不到他们正在寻找的正确“路径”。 旧服务器运行的是 php 5.3.3,新服务器运行的是 php 5.3.10(所以没有太大区别)

有些链接是这样写的:

"../modules/xxx.php"

我只是将名称更改为完整路径,它正在工作。

由于网站完全在旧服务器上运行,因此配置应该是“ok”的。你们认为除了 php 版本之外还有其他原因导致此错误吗? 我考虑在新服务器上将 php 降级到 5.3.3 进行测试.... 但我不会这样做,当可能有其他原因时。

一些错误示例:

 Deprecated: Function split() is deprecated in /data/
 Warning: include(modules/mdl_users/settings.conf.php): failed to open stream: No such file or directory in /data/xxx/www/classes/module.class.php on line 35

当路径的一部分由这样的函数写入时,他无法打开文件

include($this->registry->admin_path."modules/".$this->name."/settings.conf.php"

很明显,php 中的配置已经以某种方式改变了。由于该网站不是我的,我不想手动更改 100 条路径。你认为降级会“修复”这个问题吗?

提前致谢

【问题讨论】:

  • 降级可能是因为问题已被弃用且旧代码。您应该修复它而不是使用旧版本的 PHP。
  • 它可能在旧服务器上也已被弃用,它可能是您的 php.ini 中的不同错误报告设置
  • 可能是的,但是如果这些错误不负责,为什么页面不工作?在旧服务器上,页面 100% 正常工作。我只是复制了路径并正确配置了我的 apache2。它显示一个空白页面,这意味着 => php 问题

标签: php ubuntu migration error-log


【解决方案1】:

split() 函数自 PHP 5.3.0 起已弃用。强烈建议不要依赖此功能。

preg_split() 是此函数的建议替代方法。 如果您不需要正则表达式的强大功能,使用 explode() 会更快。

【讨论】:

    【解决方案2】:

    在我看来,php.ini 文件只是在新服务器上选择了不同的选项。例如,您可以在 php.ini 的错误部分隐藏已弃用的警告。

    如果这些警告设置为在您的旧服务器上隐藏,并设置为在您的新服务器上显示,那么这就是您突然看到它们的原因。

    我加倍非常关注PHP的小版本升级会出问题。毕竟还是5.3。 PHP 配置几乎肯定是问题的原因。

    如果您有访问权限,最好的办法是对新旧 php.ini 文件进行文件比较。

    或者,如果需要,您可以在运行时在代码中设置大多数 php.ini 选项。

    【讨论】:

    • 我已经从旧电脑上复制了 php.ini,但它无法正常工作:(
    • 啊好的。我现在尝试复制显示在 info.php 中的所有加载的 ini 文件并将它们复制到新服务器。我希望这会有所帮助。
    • 是的,只会加载 1 个 PHP.ini 文件,phpinfo() 会告诉你它的路径。您不能只将旧配置文件复制到新服务器,因为它将包含特定于服务器的详细信息,例如文件路径等。文件比较两个文件以突出差异要好得多。 Kdiff 是一个很好的工具。您需要查看两个文件之间的差异,并带来您需要的更改,例如错误屏蔽等。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多