Php 下载图像时处理404错误

Php 下载图像时处理404错误,php,laravel,curl,guzzle,Php,Laravel,Curl,Guzzle,我试图从服务器下载图像,但有时找不到图像(服务器返回“404”),因此我想下载占位符图像或跳过此图像URL。 我现在得到的是: foreach($images as $image){ $handle = curl_init($image); curl_setopt($handle, CURLOPT_RETURNTRANSFER, TRUE); $httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE); if(

我试图从服务器下载图像,但有时找不到图像(服务器返回“404”),因此我想下载占位符图像或跳过此图像URL。 我现在得到的是:

foreach($images as $image){

    $handle = curl_init($image);
    curl_setopt($handle,  CURLOPT_RETURNTRANSFER, TRUE);

    $httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE);
    if($httpCode == 404) {
        $image = "https://placehold.it/1200x800";
    }
    curl_close($handle);

    $http_client = new Client(array(
        'base_uri' => '',
        'verify' => false,
    ));

    try {
        $res = $http_client->get($image);
        $name = substr($image, strrpos($image, '/') + 1);
        Storage::put($vendor_code."/".$name, $res->getBody());

    } catch (Exception $ex) {
        \Log::error($ex);
    }
}
但即使如此,我仍然得到一个例外,那就是找不到图像

需要帮忙吗


谢谢

我尝试了您的代码,$httpCode响应总是为0,因为您从未实际执行curl。在curl_setopt行之后尝试,如下所示:

curl_setopt($handle, CURLOPT_RETURNTRANSFER, TRUE);
curl_exec($handle); 
$httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE);

从文档中下载文件有两种受支持的方式:

传递字符串以指定将存储响应正文内容的文件的路径:

传递从fopen()返回的资源以将响应写入PHP流:

第三个使用
'save_to'
的选项已弃用

传递一个Psr\Http\Message\StreamInterface对象,将响应主体流式传输到打开的Psr-7流


阅读更多信息。

Guzzle抛出一个
GuzzleHttp\Exception\ClientException的实例。您可以从异常中获取状态代码:
$e->getCode()
$client->request('GET', '/stream/20', ['sink' => '/path/to/file']);
$resource = fopen('/path/to/file', 'w');
$client->request('GET', '/stream/20', ['sink' => $resource]);
$resource = fopen('/path/to/file', 'w');
$stream = GuzzleHttp\Psr7\stream_for($resource);
$client->request('GET', '/stream/20', ['save_to' => $stream]);