You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rocky系统中调用PHP yaml_parse()函数报未定义错误的求助

解决PHP调用yaml_parse()时报错“Call to undefined function”的问题

问题背景

我正尝试使用PHP解码并解析一段base64编码的YAML字符串,在调用yaml_parse()函数之前所有步骤都正常运行。以下是完整测试代码(生产环境中该字符串将从其他来源获取):

$pdate = "LS0tIApwbGFzZWN0em9uZURheXM6IDMyNzY3CnBsYXNlY3R6b25lU3RhcnR0aW1lOiAwCnBsYXNlY3R6b25lU3RvcHRpbWU6IDE0NDAK";
$decoded = base64_decode($pdate);
yaml_parse($decoded, -1, $dCnt, $tzoneDetails);
print_r( $tzoneDetails );

运行代码时抛出错误:

PHP Fatal error: Uncaught Error: Call to undefined function yaml_parse()

我已通过以下方式安装YAML:

dnf install libyaml

执行结果显示:

Last metadata expiration check: 0:18:01 ago on Wed 19 Jan 2022 09:52:20 AM EST.
Package libyaml-0.1.7-5.el8.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!

我还在php.d目录中添加了yaml扩展配置文件,但不确定是否必要,无论是否添加该扩展文件都会出现上述错误,且每次修改后都重启了Apache:

; Enable yaml extension module
extension=yaml.so

请问有什么解决思路吗?

解决思路

别着急,你已经搞定了libyaml这个系统依赖,但这只是第一步——PHP的YAML扩展并不是默认自带的,还得单独安装对应PHP版本的yaml扩展包才行,下面是具体操作步骤:

  • 安装PHP的yaml扩展:在RHEL/CentOS 8系统上,直接安装对应PHP版本的扩展包就行。比如你用的是PHP7.4,就执行:

    dnf install php-yaml
    

    如果不确定自己的PHP版本,先跑php -v查看,要是找不到对应包,用dnf search php-yaml搜索可用的版本后再安装。

  • 验证扩展是否加载成功:安装完重启Apache或者php-fpm(看你的运行环境),然后建个phpinfo.php文件,内容是:

    <?php phpinfo(); ?>
    

    访问这个页面,搜索“yaml”,能看到扩展的详细信息就说明加载没问题了。

  • 检查配置文件冲突:你手动加的extension=yaml.so配置其实没必要,安装php-yaml包后系统会自动生成对应的配置文件(比如20-yaml.ini),手动文件可能会和自动生成的冲突,建议删掉你自己建的那个配置文件。

  • 确认版本匹配:要确保安装的php-yaml扩展和当前运行的PHP版本完全匹配,版本不兼容也会导致加载失败,用php -v和rpm -qa | grep php-yaml分别查看版本,确认一致。

做完这些步骤后,再跑你的测试代码,应该就能正常调用yaml_parse()了。

内容的提问来源于stack exchange,提问作者Wes Matchett

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 09:42:33