PHP 7的simpleXML

82

我正在测试PHP7,在最近的更新后遇到了一个奇怪的问题。SimpleXML应该默认启用,并且我的phpinfo页面显示它是可用的:

enter image description here

但是,这些函数不可用:

<?php

if (function_exists('simplexml_load_file')) {
    echo "simpleXML functions are available.<br />\n";
} else {
    echo "simpleXML functions are not available.<br />\n";
}

// result-- NOT available

而且该模块未列为已加载:

~ $ php -m
[PHP Modules]
calendar
Core
ctype
curl
...
Reflection
session
shmop
sockets
SPL
standard
sysvmsg
sysvsem
sysvshm
tokenizer
Zend OPcache
zlib

有人知道这个问题是否有解决方法吗?

版本信息:

~ $ php -v
PHP 7.0.3-8+deb.sury.org~trusty+2 (cli) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
    with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies

4
根据您提供的 phpinfo() 页面截图,看起来 SimpleXML 只出现在“Module Authors”部分。这只告诉您谁编写了它,而不意味着它已被安装或加载。实际上,如果它只出现在 phpinfo() 中的那个位置,我怀疑这意味着它 没有 被安装。 - Brendan White
$ php -i | grep simplexml - Ravshan Abdulaev
5
尝试重新启动php-fpm。使用命令sudo systemctl restart php-fpm。 - phpd
1
你能否尝试我的答案,链接为https://dev59.com/LVUM5IYBdhLWcg3wAsnv#57025620? - Apit John Ismail
13个回答

102

我遇到了同样的问题,我正在使用Ubuntu 15.10。

为了解决这个问题,我使用Synaptic软件包管理器安装了php7.0-xml软件包,其中包括SimpleXml。所以,在重新启动Apache服务器后,我的问题得到了解决。这个软件包在Debian版本中提供,你可以在这里找到它:https://packages.debian.org/sid/php7.0-xml


1
@Alexandre Wohoo 用那个把 OwnCloud 搞定了,太棒了! - Flatron
45
Ubuntu 16.04:使用以下命令安装 PHP 的 XML 扩展:sudo apt-get install php-xml - Sasha MaximAL
2
似乎这个问题也存在于Ubuntu Server 16.04中。在进行了干净的安装后,我遇到了这个问题。"PHP致命错误:未捕获的错误:调用未定义的函数xml_parser_create()"被输出到PHP错误日志中。安装Alexandre建议的软件包解决了这个问题。 - MikeyE
@MarkOdey 我之前遇到了404未找到的问题,但是尝试了Flatron提供的以下解决方案后问题得以解决。你可以尝试执行'apt update'命令。 - Martin
@Mark Odey Ubuntu 16 在 Docker 容器内部 - Martin
显示剩余3条评论

72

对于所有使用 ppa:ondrej/php PPA 的 Ubuntu 用户,这将解决问题:

apt install php7.0-mbstring php7.0-zip php7.0-xml

(详情请见 https://launchpad.net/~ondrej/+archive/ubuntu/php

感谢 @Alexandre Barbosa 指出此问题!

编辑20160423:

解决此问题的一条命令:

sudo add-apt-repository -y ppa:ondrej/php && sudo apt update && sudo apt install -y php7.0-mbstring php7.0-zip php7.0-xml

(这将添加上面提到的PPA,并确保您始终拥有最新的PHP版本。我们现在已经使用Ondřej的PHP PPA近两年了,它一直表现得非常好。)


1
我正在运行PHP 7.1,所以我将7.0的引用更改为7.1,在重新启动后它就可以工作了。 - Mark Hewitt

30

对于带有Ubuntu 14.04的

PHP 7.0.13-1+deb.sury.org~trusty+1 (cli)(NTS)

sudo apt-get install php-xml

对我有用。


18

对于在Docker中使用Alpine的情况,您可以使用apk add php7-simplexml命令。

如果这无法正常工作,您可以运行apk add --no-cache php7-simplexml 命令。这是因为您没有首先更新软件包索引。


谢谢,今天这对我有用!可以确认在Alpine Linux 3.6.2上有效(Linux内核4.4.0-96-generic x86_64)。 - eluong
1
重要的是,在将软件包安装到Alpine容器后,您应该运行“docker restart <container_name>”以使这些更改生效。 - guychouk
对我没用...在docker中使用alpine3.7...得到 php7-simplexml(缺少): 所需:world [php7-simplexml] - ronit
1
@ronit 请尝试使用 apk add --no-cache php7-simplexml 命令。如果您没有先运行 apk update 命令,则需要添加 --no-cache 标志。 - brismuth
php:7.4-fpm-alpine 上,apk add --no-cache php7-simplexml 无法正常工作。 - JRichardsz

13

我正在使用在Windows上的Bash(Ubuntu 16.04),我刚刚安装了php7.0-xml,现在符合Symfony 3.2.7 PHP要求的一切都可以正常工作。

sudo apt-get install php7.0-xml

10

------------------在CentOS中-------------------------

查找提供php-xml的软件包:

 yum provides php-xml

从输出列表中选择适当的内容,安装

yum install php70u-xml-7.0.14-2.ius.centos7.x86_64

1
这是一个好的答案,因为 yum provides 命令将帮助用户找到安装在系统上的任何 PHP 版本的正确软件包。在 yum install 命令中不必使用完整的软件包名称。 - Craig Finch

9
由于谷歌把我带到这里,所以在Ubuntu 20.04上,以下操作适用于2020年:
sudo apt install php7.4-xml

如果在Apache2上,记得重新启动(可能不是必要的):

sudo systemctl restart apache2

谢谢!这对我在NGINX上起作用了!只需要执行以下操作:sudo apt install php7.3-xml(7.3是我的php版本),然后重新启动服务:sudo service nginx restart。 - Alejo_Blue

6

在AWS Linux 2上遇到了相同的问题,phpinfo()显示SimpleXML已安装但无法正常工作,以下命令解决了我的问题

sudo yum install php-xml

4

对于Ubuntu 18.04和php7.3,请安装php7.3-xml。

    sudo apt-get install php7.3-xml

这将安装所需的simplexml


3
通常在Debian系统上,您会有不同的PHP配置用于CLI和作为Apache模块运行的PHP。您的phpinfo页面可能会显示simplexml通过Web服务器启用,而在CLI中未启用。

@Mike-- 谢谢,那是真的-- 但是,该模块应默认启用。据我所知,我需要重新编译PHP以启用该模块,因为您无法在php.ini中启用它。 - user101289

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接