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

PHP Curl脚本在命令行正常运行但通过Web服务器(PHP-FPM)访问时无数据返回的问题求助

PHP Curl脚本在命令行正常运行但通过Web服务器(PHP-FPM)访问时无数据返回的问题求助

我遇到了一个非常棘手的问题:我编写的PHP Curl脚本在命令行执行时完全正常,能成功获取JSON格式的数据并解析输出,但将其放到Web服务器文档根目录后,无论是通过浏览器直接访问,还是通过局域网内其他机器的脚本调用,curl_exec()都返回空数据,获取到的内容长度为0,还会触发数组偏移访问的警告。

脚本内容

先给大家看一下我的核心脚本test.php:

#!/usr/bin/php

<?php

$url = "https://host.ext";

$user = "<user>";

$pass = "<pw>";

$curl = curl_init();

curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);

curl_setopt($curl, CURLOPT_USERPWD, $user.":".$pass);

curl_setopt($curl, CURLOPT_URL, $url);

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

//curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));

//curl_setopt($curl, CURLOPT_HTTPHEADER, array('Accept: application/json'));

$result = curl_exec($curl);

$resultlen = strlen($result);

curl_close($curl);

$r_ary = array();

$r_ary = json_decode( $result , true , 512 , JSON_OBJECT_AS_ARRAY );

$st = 'status';

$status = $r_ary[$st];

echo "<!doctype html>";

echo "<html>";

echo "<body>";

echo "Length: $resultlen";

echo "Status: $status";

echo "</body>";

echo "</html>";

?>

命令行执行正常情况

在命令行下运行该脚本(替换真实的账号密码后),能成功获取913字节的数据,输出如下:

[root@box local]# ./test.php

<!doctype html><html><body>Length: 913Status: active</body></html>

[root@box local]#

Web服务器/跨LAN调用的异常情况

当我去掉脚本开头的#!行,将其放到Web服务器的文档根目录后,问题就出现了:

  • 直接用浏览器访问,页面显示Length: 0Status:
  • 通过局域网内另一台机器(box2)的脚本调用,同样返回空数据。调用脚本call.php内容如下:
#!/usr/bin/php

<?php

$webPage = "http://box/test.php";

date_default_timezone_set("America/New_York");

$fd = fopen($webPage, "r");

$r = file_get_contents( $webPage );

print "Retrieved: $r \n";

fclose($fd);

?>

执行后输出:

[root@box2 work23]$ ./call.php

Retrieved: <!doctype html><html><body>Length: 0Status: </body></html>

[root@box2 work23]$

已尝试的排查操作

  • 我尝试过注释/取消注释CURLOPT_RETURNTRANSFER和HTTPHEADER相关的配置项,但Web服务器环境下的脚本完全没有变化;不过命令行版本必须开启CURLOPT_RETURNTRANSFER才能正常工作。

系统环境信息

  • 操作系统:CentOS Stream 9(在同版本的AlmaLinux上也遇到了相同问题)
  • Web服务器:Apache 2.4.57
  • PHP环境:PHP-FPM(未使用mod_php),PHP版本8.0.30
  • 安装方式:通过dnf包管理器安装httpd、php、php-fpm及相关依赖

日志排查情况

查看/var/log/php-fpm下的日志,没有发现curl相关的错误信息,只有因为空数据导致的数组偏移警告:

[root@box php-fpm]# tail -3 www-error.log

[05-Jan-2024 22:05:12 UTC] PHP Warning:  Trying to access array offset on value of type null in /var/www/html/test.php on line 25

[05-Jan-2024 22:08:57 UTC] PHP Warning:  Trying to access array offset on value of type null in /var/www/html/test.php on line 25

[05-Jan-2024 22:08:57 UTC] PHP Warning:  Trying to access array offset on value of type null in /var/www/html/test.php on line 25

PHP-FPM的主错误日志里只有服务启动、停止的通知,没有异常报错。

其他配置检查

我检查了/etc/php-fpm.conf和/etc/php-fpm.d/www.conf,里面没有任何与curl相关的配置;系统只有一个php.ini文件位于/etc目录下。目前我在考虑是否要尝试从PHP-FPM切换到mod_php,但不确定当前系统版本是否还支持mod_php。

有没有大佬遇到过类似的问题并解决了?麻烦给点排查思路或者解决方案,非常感谢!

备注:内容来源于stack exchange,提问作者Clovis_Sangrail

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 09:33:02