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

CentOS Stream 9下PHP cURL请求失败但终端curl正常求助

问题:PHP cURL无法连接服务器,但终端curl正常工作

我有一台运行CentOS Stream 9的服务器,搭载Apache 2.4.57和PHP 8.2.6。已通过phpinfo()确认cURL 7.76.1已启用,但使用PHP发起cURL请求时返回空内容并抛出错误,而在终端执行相同curl请求却能正常获取内容。

test.php文件内容:

<?php
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "https://catfact.ninja/fact");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$result = curl_exec($ch);

if ($errno = curl_errno($ch)) {
    $error_message = curl_strerror($errno);
    echo "cURL error ({$errno}):
 {$error_message}";
}

curl_close($ch);
echo $result;

PHP执行输出:

cURL error (7): Couldn't connect to server

终端执行命令:

[user@server ~]$ curl https://catfact.ninja/fact

终端执行输出:

{"fact":"The average litter of kittens is between 2 - 6 kittens.","length":55}
排查与解决步骤

1. 检查SELinux权限限制

CentOS Stream 9默认启用SELinux,可能禁止Apache(httpd进程)发起网络请求。先临时关闭SELinux测试:

setenforce 0

如果测试后PHP cURL恢复正常,执行以下命令永久允许Apache网络连接:

setsebool -P httpd_can_network_connect on

2. 统一CA证书配置

终端curl和PHP的curl可能使用不同的CA证书:

  • 在phpinfo()中查看curl.cainfo项,确认是否配置了正确的CA证书路径
  • 若未配置,在php.ini中添加系统默认CA证书路径:
    curl.cainfo = /etc/pki/tls/certs/ca-bundle.crt
    openssl.cafile = /etc/pki/tls/certs/ca-bundle.crt
    
    修改后重启Apache:systemctl restart httpd

3. 查看Apache错误日志获取细节

执行命令查看Apache错误日志,获取连接失败的具体原因:

tail -f /var/log/httpd/error_log

日志可能会显示DNS解析失败、端口拦截等关键信息。

4. 测试PHP环境的DNS解析能力

在测试代码中添加DNS解析测试,确认PHP能否正确解析目标域名:

var_dump(gethostbyname("catfact.ninja"));

如果返回false或错误IP,检查/etc/resolv.conf的DNS服务器配置,确保Apache进程有权限读取该文件。

5. 验证防火墙出站规则

确认firewalld是否允许HTTPS(443端口)出站请求:

firewall-cmd --list-all

若缺少相关规则,执行以下命令添加并重启防火墙:

firewall-cmd --permanent --add-service=https
firewall-cmd --reload

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 06:35:07