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

使用PHP与Guzzle下载远程图片时出现0字节文件的问题排查

问题描述

尝试通过远程GraphQL API,使用PHP和Guzzle批量下载图片资源到Web服务器。所有请求返回200状态码,但生成的文件均为0字节,无法确定原因。

当前代码:

foreach ($images as $url) {
  $client = new Client([
    'base_uri' => 'https://removed.co.uk/api/graphql',
    'auth' => [
      'removed',
      'removed',
    ],
  ]);

  $request = $client->request('GET', '/resources/image/'. basename($url) .'', ['sink' => 'api_files/product_images/'. basename($url) .'']);
  echo $request->getStatusCode() . '<br />';
}

$images数组存储待下载图片的绝对路径,文件已成功生成在api_files/product_images/目录下,但所有文件大小均为0字节。

可能的原因及解决方法
  • 请求路径拼接错误:你用basename($url)拼接API请求路径,但$images里是图片的绝对路径,若原URL包含的文件名并非API接口期望的资源标识(比如实际需要的是图片ID而非原始文件名),会导致请求到的是一个空响应资源。建议打印完整请求URL验证:
    $targetPath = '/resources/image/'. basename($url);
    echo "请求路径:{$targetPath}<br />";
    
  • Guzzle流处理未生效:部分场景下sink参数可能未正确触发响应体写入,可尝试手动读取响应体并写入文件:
    $response = $client->request('GET', $targetPath);
    file_put_contents('api_files/product_images/'. basename($url), $response->getBody()->getContents());
    
  • API返回空内容:状态码200不代表有有效响应体,可能是权限不足、资源不存在等原因导致API返回空内容。可打印响应体确认:
    echo "响应内容:". $response->getBody()->getContents() ."<br />";
    
  • 重复初始化Client实例:循环内每次新建Client属于冗余操作,可能引发连接异常。建议将Client初始化移到循环外:
    $client = new Client([
      'base_uri' => 'https://removed.co.uk/api/graphql',
      'auth' => [
        'removed',
        'removed',
      ],
    ]);
    
    foreach ($images as $url) {
      $targetPath = '/resources/image/'. basename($url);
      $response = $client->request('GET', $targetPath, ['sink' => 'api_files/product_images/'. basename($url)]);
      echo $response->getStatusCode() . '<br />';
    }
    
  • 文件路径或权限问题:相对路径可能导致写入位置异常,或PHP进程无足够写入权限。建议使用绝对路径并检查目录权限:
    $sinkPath = __DIR__ . '/api_files/product_images/'. basename($url);
    $response = $client->request('GET', $targetPath, ['sink' => $sinkPath]);
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 06:01:31