0

我正在尝试在已经托管实时网站的网络服务器上部署一些 PHP 脚本。在我的本地开发环境中,脚本运行良好。但是,在服务器上它们没有运行,我通过 apache 错误日志将问题追溯到 PHP 无法创建新的 DOMDocument 对象。我相信我已将其缩小到 phpinfo() 中“配置命令”设置中的一行。在该部分中,我看到--disable-dom,以及--without-curl。这两个都应该启用,以便我的脚本正常工作。

如果我可以在我的脚本中启用这些功能,那就太好了。否则我可能需要重新编译 php,但除非绝对必要,否则我不愿意这样做。有什么方法可以覆盖 php.ini 中的这些设置,在运行时在脚本本身中,或通过其他方法?

编辑:如果有帮助,PHP 版本是 5.3.3-14.el6_3 并且它似乎是通过yum. 操作系统是 Scientific Linux 6.3。

4

1 回答 1

1

答案在这里:

https://serverfault.com/questions/66189/how-to-enable-dom-without-recompile-php

原来在这种情况下我只需要在运行后重新启动 Apacheyum install php-xml

编辑:这是对这里发生的事情的更全面的概述:

PHP 5.3.3 是通过 Scientific Linux 的yum. 默认情况下,它是从@sl-security repo 安装的。这导致编译命令排除了 curl 和 DOMDocument 等功能。

为了启用这些功能,我运行了yum install php-xml. 然后,我通过dom.so检查dom.ini./etc/php.d/

我没有意识到我需要重新启动 Apache 才能使更改生效。在这个特定的系统上,这是通过键入以下内容来实现的:

service httpd restart

在这一点上,我能够使用 PHP DOMDocument 类。

phpinfo() 中的“编译命令”只是表明 PHP 是在没有模块的情况下编译的。这些模块可以在使用yum. 我想如果没有 yum,只需要下载适当的 .so 模块文件并编辑 php.ini 以确保包含该模块。

但当然,关键是要使任何更改生效,您必须重新启动 Apache。那部分对我来说并不明显!

于 2013-01-29T22:52:43.353 回答