Rocky系统中调用PHP yaml_parse()函数报未定义错误的求助
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

