SimpleXML 在 Web 服务器中出现未捕获的错误,尽管它已在 CLI 中安装并启用

SimpleXML giving an Uncaught Error in Webserver despite it being installed and enabled in CLI

提问人:Montague W 提问时间:7/26/2023 最后编辑:hakreMontague W 更新时间:7/26/2023 访问量:51

问:

我正在尝试在谷歌云中的灯服务器上运行 php 脚本。尽管 SimpleXML 和 xml 已安装并处于活动状态(据我所知),但由于未捕获的错误,该脚本仍失败。我刚搬到 Google Cloud,对环境不够熟悉,也不知道是否遗漏了一些基本的设置步骤。我在同一台服务器上设置并成功运行了 wordpress,所以我对此有点困惑。将不胜感激任何帮助或指导!

Ubuntu 20.04.6 LTS 上的 PHP 8.2.8。

每当我尝试使用 SimpleXMLElement 时,我都会收到此错误。

Fatal error: Uncaught Error: Class "SimpleXMLElement" not found in /var/www/html/ifg_indexp/tpnapis/simplexmltest.php:48

我以为可能该功能没有安装/启用,但似乎是:

$ php -m | grep SimpleXML
SimpleXML

$ php -m | grep xml
libxml
xml
xmlreader
xmlrpc
xmlwriter

php -i 返回模块已启用,所以这似乎也没问题。

$ php -i

SimpleXML
SimpleXML support => enabled
Schema support => enabled

此外,xml 显示为活动状态:

 
xml
XML Support => active
XML Namespace Support => active
libxml2 Version => 2.9.14

我尝试测试的简化文件如下:

<?php

use SimpleXMLElement;
//use SimpleXML;
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

$note = <<<XML
    <depots>
        <depot>
            <number>001</number>
            <phone>111</phone>
            <name>company1</name>
            <depotaddress>
                <add1>address line1</add1>
                <add2>address 2</add2>
            </depotaddress>
        </depot>
        <depot>
            <number>002</number>
            <phone>222</phone>
            <name>company2</name>
            <depotaddress>
                <add1>address1</add1>
                <add2>address2</add2>
            </depotaddress>
        </depot>
    </depots>
XML;

echo "</br>printf : ";printf($note);
echo "</br>var_dump : ";var_dump($note);
echo "</br>asXML :";

$xml = new SimpleXMLElement($note);
echo $xml;
echo $xml->asXML();

?>

这在屏幕上给了我这个结果:

printf : 001 111 company1 address line1 address 2 002 222 company2 address1 address2
var_dump : string(364) " 001 111 company1 address line1 address 2 002 222 company2 address1 address2 "
asXML :
Fatal error: Uncaught Error: Class "SimpleXMLElement" not found in /var/www/html/xxx1/xxx2/simplexmltest.php:40 Stack trace: #0 {main} thrown in /var/www/html/xxx1/xxx2/simplexmltest.php on line 40

对我来说唯一奇怪的是 phpinfo() 上的 PHP 版本与 cli 上的版本不同。
此外,phpinfo() 屏幕上没有 SimpleXML 详细信息框。

php gcloud simplexml

评论

0赞 Chris Haas 7/26/2023
您已经检查了该模块在 CLI 上是否可用,但如果您在 Web 上使用它,您还应该创建一个带有该模块的页面,以确保它在那里也可用。phpinfo();
0赞 hakre 7/26/2023
啊,现在阅读它,命令行上的 php 配置可能与 Wordpress 的配置完全无关,即使它们在同一台服务器上。在 Wordpress 的 PHP 中启用 SimpleXML,错误消息只是显示您还没有。正如你所想象的那样,有很多重复的问答。
0赞 Montague W 7/27/2023
@hakre - 谢谢,是的。正如Chris所建议的那样,我确实检查了phpinfo,但是虽然SimpleXML在phpinfo页面的底部记入了贷方,但我在页面上的任何地方都看不到一个部分框,上面写着SimpleXML或XML已启用。配置文件 php.ini 路径是 /etc/php/8.0/apache2/php.ini 所以我编辑了该文件并添加了扩展行: ;extension=SimpleXML ;extension=xml 但是尽管重新启动并重新启动服务器和 apache,但它似乎没有任何区别。
0赞 hakre 7/27/2023
该部分的标题是“SimpleXML”,表格单元格是“SimpleXML support”,如果启用了它,则它旁边的单元格具有“enabled”。如果缺少该扩展,请启用该扩展。如果您已经这样做了,请检查PHP错误日志中的启动错误,以及无法加载扩展的原因,例如未安装。如果未正确安装,请安装它。然后启用它。然后重新加载 Web 服务器和/或 PHP 进程管理器(如果您使用的话),您将看到它已启用。记录您的工作,查看预配脚本的更改,提交配置更改并推送。

答: 暂无答案