CentOS7下PHP已启用cURL却报curl_init未定义错误求助
PHP cURL扩展异常排查与解决(CentOS 7环境)
问题描述
CentOS 7系统中,phpinfo()显示cURL已启用,但执行以下PHP代码时:
<?php // API $url = 'https://api.openai.com/v1/embeddings'; // Create a new cURL resource $ch = curl_init($url); ?>
抛出致命错误:
Uncaught Error: Call to undefined function curl_init()
执行yum install php-curl时,提示已安装最新版本的php-common-8.1.14-1.el7.remi.x86_64。
环境信息
php --version PHP 8.1.14 (cli) (built: Jan 4 2023 06:45:14) (NTS gcc x86_64) Copyright (c) The PHP Group Zend Engine v4.1.14, Copyright (c) Zend Technologies with Zend OPcache v8.1.14, Copyright (c), by Zend Technologies
phpinfo()输出:
cURL support enabled
cURL Information 7.29.0
php -i | grep "curl" /etc/php.d/20-curl.ini, curl curl.cainfo => no value => no value
/etc/php.d/20-curl.ini配置:extension=curl.so
yum list *curl*输出:
yum list *curl* Installed Packages curl.x86_64 7.29.0-59.el7_9.1 installed libcurl.x86_64 7.29.0-59.el7_9.1 installed libcurl-devel.x86_64 7.29.0-59.el7_9.1 installed python-pycurl.x86_64 7.19.0-19.el7 @base Available Packages collectd-curl.x86_64 5.8.1-1.el7 epel collectd-curl_json.x86_64 5.8.1-1.el7 epel collectd-curl_xml.x86_64 5.8.1-1.el7 epel curlftpfs.x86_64 0.9.2-14.el7 epel flickcurl.x86_64 1.25-2.el7.nux nux-dextop flickcurl-debuginfo.x86_64 1.25-2.el7.nux nux-dextop flickcurl-devel.x86_64 1.25-2.el7.nux nux-dextop fuse-curlftpfs.x86_64 0.9.1-1.el6.rf rpmforge libcurl.i686 7.29.0-59.el7_9.1 updates libcurl-devel.i686 7.29.0-59.el7_9.1 updates nbdkit-plugin-curl.x86_64 1.2.7-2.el7 epel ocaml-curl.x86_64 0.7.5-3.el7 epel ocaml-curl-devel.x86_64 0.7.5-3.el7 epel perl-WWW-Curl.x86_64 4.15-13.el7 base php-pear-Net-Curl.noarch 1.2.5-10.el7 epel python34-pycurl.x86_64 7.43.0-7.el7 epel python36-pycurl.x86_64 7.43.0-7.el7 epel uwsgi-alarm-curl.x86_64 2.0.18-8.el7 epel uwsgi-plugin-curl-cron.x86_64 2.0.18-8.el7 epel
排查方向与解决办法
1. 验证CLI与Web环境PHP版本一致性
phpinfo()是Web环境输出,php --version是CLI版本,两者可能属于不同PHP实例:
- 查看Web服务器(Apache/Nginx)使用的PHP版本,对比是否与CLI版本一致。
- 若不一致,需确保Web环境的PHP已安装并启用cURL扩展。
2. 重启Web服务器
配置修改后未重启服务会导致扩展未加载,执行对应命令:
- Apache:
systemctl restart httpd - Nginx(配合php-fpm):
systemctl restart php-fpm && systemctl restart nginx
3. 检查cURL扩展文件有效性
确认curl.so文件存在且可读取:
find / -name curl.so 2>/dev/null
确保文件路径与/etc/php.d/20-curl.ini中的配置匹配,同时检查文件权限:
ls -l /path/to/curl.so
保证Web服务器用户(如apache/nginx)有读取权限。
4. 确认PHP扩展目录配置
查看PHP扩展目录路径:
php -i | grep extension_dir
若curl.so不在该目录,可在20-curl.ini中指定绝对路径:
extension=/usr/lib64/php/modules/curl.so
修改后重启Web服务器。
5. 重装PHP cURL扩展
可能存在文件损坏,执行强制重装:
yum reinstall php-curl
重装完成后重启Web服务器。
6. 排查SELinux限制
SELinux可能阻止PHP加载扩展,临时关闭测试:
setenforce 0
若问题解决,可配置SELinux规则允许加载,或永久调整(谨慎操作):
sed -i 's/SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config
内容的提问来源于stack exchange,提问作者SomebodySysop
相关产品推荐
相关产品推荐

