parse_ini_file仅支持.ini格式,无法读取YAML文件;应使用symfony/yaml库或PECL yaml扩展,前者通过Composer安装更便捷,后者性能更高但需配置php.ini。

parse_ini_file 不能读 YAML,别试了
PHP 原生函数 parse_ini_file() 只认 .ini 格式,传进去 config.yaml 会直接返回 false 或空数组,连报错都懒得给——不是“解析失败”,是压根不识别这个文件类型。常见错误现象:Warning: parse_ini_file(): Unable to open,其实根本不是路径问题,是格式错配。
用 symfony/yaml 是最稳的选择
Composer 安装最省心:composer require symfony/yaml。不需要改 php.ini,也不依赖系统级扩展,适合绝大多数项目。
- 必须在使用前引入自动加载:
require 'vendor/autoload.php'; - 解析文件时加异常捕获,否则
ParseException会让脚本直接终止:use Symfony\Component\Yaml\Yaml; use Symfony\Component\Yaml\Exception\ParseException; <p>try { $cfg = Yaml::parseFile(<strong>DIR</strong> . '/config.yaml'); } catch (ParseException $e) { throw new RuntimeException('YAML 解析失败:' . $e->getMessage()); } - 注意缩进:YAML 靠空格(推荐 2 个)对齐层级,Tab 字符、混用空格/Tab、多打一个空格都会导致
ParseException,且不提示具体行号
用 PECL yaml 扩展性能更高,但部署更麻烦
如果你的环境已安装 yaml 扩展(php -m | grep yaml 能看到),可用原生函数 yaml_parse_file(),它比 symfony/yaml 快约 3–5 倍,尤其适合高频读取配置的 CLI 场景。
- 确认扩展启用:
extension=yaml必须写在php.ini中,并重启 PHP 进程(FPM 或 Apache) - CentOS/AlmaLinux 上需先装
libyaml-devel,再用pecl install yaml,yum或dnf直接搜不到 - 函数不抛异常,出错时返回
false,必须手动检查:if (false === $cfg = yaml_parse_file($path)) { /* 处理错误 */ }
别用 Spyc,除非你明确知道风险
Spyc 是纯 PHP 实现,不用扩展也不用 Composer,看着轻量。但它自 2018 年后基本停止维护,不支持 YAML 1.2 新特性(如锚点、标签、多文档),遇到 &anchor 或 !!float 类型会静默失败或解析错乱。
立即学习“PHP免费学习笔记(深入)”;
如果你的 YAML 文件只含基础键值和列表,且项目无法引入 Composer,才考虑它;否则建议直接跳过。真正容易被忽略的是:YAML 文件若放在 Web 可访问目录下,可能被直接下载泄露敏感配置——务必把 config.yaml 放到 webroot 外,或用 .htaccess / location ~ \.yaml$ { deny all; } 拦住 HTTP 请求。



















