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

Composer诊断遇curl error 28超时,求排查解决方法

Composer curl error 28超时排查方案(浏览器/独立curl可正常访问场景)

针对你遇到的Composer执行diagnose时报curl error 28超时,但浏览器和单独curl命令能正常访问目标地址的情况,按以下步骤排查:

1. 验证端口连通性

直接测试目标域名的443端口是否可访问:

  • 在PowerShell执行:
    Test-NetConnection repo.packagist.org -Port 443
    Test-NetConnection api.github.com -Port 443
    
  • 查看输出中的TcpTestSucceeded字段:
    • 若为False,说明ISP或本地防火墙封禁了443端口;
    • 若为True,则端口无问题,排查其他原因。

2. 检查PHP与系统cURL的配置差异

系统curl和PHP的cURL可能使用不同配置,导致行为不一致:

  • 执行php -i | findstr /i curl查看PHP的cURL配置,重点关注:
    • curl.cainfo:是否配置了有效的CA证书路径(Windows下未配置可能引发SSL验证超时);
    • curl.proxy_host/curl.proxy_port:是否残留无效代理配置。
  • 对比系统curl配置(执行curl --config),确认代理、CA证书等关键配置是否一致。

3. 用PHP脚本追踪cURL请求细节

编写测试脚本test_curl.php,获取详细的cURL请求日志:

<?php
$ch = curl_init('https://repo.packagist.org/packages.json');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_VERBOSE, true);
$verboseLog = fopen('php://temp', 'w+');
curl_setopt($ch, CURLOPT_STDERR, $verboseLog);

$response = curl_exec($ch);
$errorNo = curl_errno($ch);
$errorMsg = curl_error($ch);

rewind($verboseLog);
$verboseContent = stream_get_contents($verboseLog);

echo "错误代码: $errorNo\n";
echo "错误信息: $errorMsg\n";
echo "详细日志:\n$verboseContent\n";
curl_close($ch);
?>

执行php test_curl.php,根据日志判断是DNS解析慢、SSL握手超时还是连接阶段超时。

4. 排查DNS解析差异

确认系统和PHP使用的DNS解析结果是否一致:

  • 命令行执行nslookup repo.packagist.org记录IP;
  • 在测试脚本中添加以下代码并执行:
    <?php var_dump(gethostbyname('repo.packagist.org')); ?>
    
  • 若两者IP不同,说明PHP使用的DNS服务器异常,可修改php.ini的dns配置或本地DNS服务器。

5. 临时禁用SSL验证测试(仅用于排查)

在test_curl.php中添加以下代码后重新执行:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

若请求成功,说明是CA证书验证问题,需在php.ini中配置curl.cainfo为有效证书路径。

6. 清除Composer代理配置

若存在无效代理配置,会导致请求超时:

  • 执行以下命令清除全局代理:
    composer config -g --unset http-proxy
    composer config -g --unset https-proxy
    
  • 再执行composer diagnose测试。

7. 切换Composer镜像源

尝试切换到国内镜像,排除原源的网络波动:

  • 执行:
    composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
    
  • 重新执行composer diagnose验证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 05:07:43