Ubuntu服务器PHP7.0环境下simplexml_load_file()未定义错误求助
simplexml_load_file()未定义的问题 这种情况我碰到过好多次,核心原因几乎都是CLI模式和Web服务器使用的PHP配置不一致——你用php -m查看的是命令行PHP的模块加载情况,但网站运行依赖的是Apache/Nginx对应的PHP环境(mod_php或PHP-FPM),这俩的配置文件往往是分开的。下面是一步步的排查和修复步骤:
第一步:确认Web环境使用的PHP配置文件
先在你的网站根目录创建一个临时文件phpinfo.php,内容如下:<?php phpinfo(); ?>访问这个文件(比如
http://你的域名/phpinfo.php),找到Loaded Configuration File这一项,记下对应的路径(比如Apache可能是/etc/php/7.0/apache2/php.ini,Nginx+PHP-FPM可能是/etc/php/7.0/fpm/php.ini)。同时确认页面显示的PHP版本确实是7.0,避免服务器上装了多个PHP版本导致混淆。第二步:检查对应配置文件中SimpleXML的启用状态
用编辑器打开刚才找到的php.ini文件,比如:sudo nano /etc/php/7.0/apache2/php.ini搜索
extension=simplexml.so,如果前面有分号;(表示注释),把分号去掉,保存文件。另外,SimpleXML依赖dom模块,也顺便检查extension=dom.so是否启用(同样去掉前面的分号,如果存在的话)。第三步:重启相关服务
根据你的Web服务器类型执行重启命令:- 如果你用的是Apache(mod_php):
sudo systemctl restart apache2 - 如果你用的是Nginx+PHP-FPM:
sudo systemctl restart nginx sudo systemctl restart php7.0-fpm
- 如果你用的是Apache(mod_php):
第四步:验证修复效果
重新访问你的网站,看错误日志里的Call to undefined function simplexml_load_file()是否消失。也可以刷新刚才的phpinfo.php页面,搜索SimpleXML,确认模块已经出现在加载列表里。
如果以上步骤都没用,那大概率是你用了自定义编译的PHP 7.0,这种情况需要重新编译PHP,加上--enable-simplexml和--enable-dom编译参数(因为SimpleXML依赖dom模块)。不过Ubuntu官方源的PHP包默认是启用这些模块的,所以这种情况比较少见。
内容的提问来源于stack exchange,提问作者Sneha Maheshwari

