XMLReader 扩展默认已编译进 XAMPP 的 PHP 但禁用,需在 php.ini 中取消 ;extension=xmlreader 注释、重启 Apache 并用 extension_loaded('xmlreader') 验证;流式解析适合大 XML,注意路径、关闭句柄及配置文件路径准确性。

XMLReader 扩展默认已编译进 XAMPP 的 PHP,但通常处于禁用状态;只需在 php.ini 中取消注释对应行即可启用,无需重新编译或下载 DLL。
确认 XMLReader 是否已加载
运行 php -m | findstr xmlreader(Windows)或 php -m | grep xmlreader(Linux/macOS),若无输出,说明未启用。也可写个 test.php:,浏览器访问后返回 bool(false) 就是没开。
注意:别直接查 phpinfo() 页面里有没有 “XMLReader” 标题栏——它可能显示“enabled”但实际不可用,因为模块名和扩展名不完全等价;extension_loaded() 才是唯一可信判断方式。
启用 XMLReader 的三步操作
找到你当前 PHP 使用的 php.ini 文件:XAMPP 控制面板点 Apache → Config → PHP (php.ini),或运行 php --ini 查路径。
XAMPP 8.0.30 是一款免费、开源的跨平台 Web 服务器集成包,专为快速搭建本地 PHP 开发环境而设计。该版本核心组件包括:Apache 2.4.56、MySQL 8.0.33、PHP 8.0.30、phpMyAdmin 5.2.1 等。它支持 Windows、Linux 和 macOS 系统,可让开发者在个人电脑上轻松模拟服务器环境,无需复杂配置即可运行 WordPress、Thin
- 用记事本或 VS Code 以管理员权限打开该
php.ini - 搜索
;extension=xmlreader(注意分号开头) - 删掉前面的分号,保存文件
- 重启 Apache(Stop → Start,别只点 Restart)
常见误区:extension=php_xmlreader.dll 是旧版写法,XAMPP 5.6+ 已统一为 extension=xmlreader;若保留 .dll 后缀反而会报错 PHP Warning: Cannot load module 'xmlreader'。
验证能否正常解析大 XML 文件
XMLReader 是流式解析器,内存占用低,适合处理 >10MB 的 XML。写个最小验证脚本:
<?php
$reader = new XMLReader();
if (!$reader->open('data.xml')) {
die('无法打开 XML 文件');
}
while ($reader->read()) {
if ($reader->nodeType === XMLReader::ELEMENT && $reader->localName === 'item') {
echo $reader->readInnerXml() . "\n";
break;
}
}
$reader->close();
?>
关键点:
-
readInnerXml()读取当前节点全部子内容(含标签),比readString()更稳妥 - 必须调用
$reader->close(),否则下次调用可能因句柄残留失败 - 若遇到
XMLReader::open(): Unable to open source data,检查data.xml路径是否为相对路径且位于当前工作目录(CLI 下是命令执行路径,Web 下是htdocs目录)
最易被忽略的是:修改 php.ini 后没重启 Apache,或改错了文件(XAMPP 有多个 php.ini,如 \xampp\php\php.ini 是 CLI 用的,而 Web 请求走的是 \xampp\apache\bin\php.ini)。务必用 phpinfo() 页面顶部的 “Loaded Configuration File” 路径为准。

















