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

XAMPP中file_get_contents调用耗时30秒的问题排查求助

问题分析与解决方案

这种每次恰好耗时30秒、连续调用叠加耗时的情况,几乎不可能是代码错误,大概率是PHP的默认网络配置或DNS解析逻辑导致的问题。结合你浏览器访问正常、测试谷歌耗时却偏长的现象,我给你拆解原因和解决办法:

核心原因推测

  1. IPv6解析超时:很多PHP环境默认优先尝试IPv6连接,如果目标网站的IPv6节点不可用/响应慢,PHP会等待IPv6连接超时后再切换到IPv4,这个等待时间刚好接近30秒(部分系统的TCP连接超时阈值就是30秒)。而浏览器通常会同时尝试IPv4和IPv6,或优先用IPv4,所以不会出现延迟。
  2. 默认套接字超时设置:PHP的default_socket_timeout默认值是60秒,但如果目标服务器的响应分阶段返回,可能会触发分段超时;不过你说每次恰好30秒,IPv6的可能性更高。
  3. DNS缓存缺失:浏览器会自动缓存DNS解析结果,但PHP的file_get_contents默认不会缓存DNS,每次请求都要重新解析,若DNS服务器响应慢,也会导致延迟。

具体解决步骤

1. 临时修复:给file_get_contents添加上下文配置

在调用时强制指定IPv4和缩短超时时间,快速验证问题:

$url = "你的目标URL";
// 创建上下文选项,强制IPv4+5秒超时
$context = stream_context_create([
    'socket' => ['bindto' => '0.0.0.0:0'], // 绑定到IPv4地址,强制用IPv4连接
    'http' => ['timeout' => 5] // 设置整体超时为5秒
]);

$time_start = microtime(true);
echo file_get_contents($url, false, $context);
$time_end = microtime(true);
$execution_time = ($time_end - $time_start)/60;
echo '<b>Total Execution Time:</b> '.$execution_time.' Mins';

如果修改后耗时大幅降低,说明确实是IPv6解析的问题。

2. 全局配置修改(永久解决)

打开XAMPP目录下的php/php.ini文件,找到以下配置项修改:

; 缩短默认套接字超时时间
default_socket_timeout = 10

; 如果使用curl扩展(推荐),可以强制IPv4
curl_ipresolve = 4

修改后重启XAMPP的Apache服务,让配置生效。

3. 替代方案:用curl替代file_get_contents

file_get_contents在处理远程请求时的灵活性和性能都不如curl,建议换成curl实现,它的超时控制更精准,默认也有更好的网络适配:

$url = "你的目标URL";
$time_start = microtime(true);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10); // 超时10秒
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); // 强制IPv4
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // 自动跟随跳转

$content = curl_exec($ch);
if(curl_errno($ch)){
    echo 'Curl error: ' . curl_error($ch);
}
curl_close($ch);

echo $content;
$time_end = microtime(true);
$execution_time = ($time_end - $time_start)/60;
echo '<b>Total Execution Time:</b> '.$execution_time.' Mins';

curl不仅能解决超时问题,还能提供错误信息,方便排查后续问题。

验证方法

你可以先运行带上下文的file_get_contents测试,如果耗时正常,就说明是IPv6的问题;如果还是慢,再检查你的DNS服务器设置(比如换成公共DNS)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:42:07