我正在尝试从服务器下载图像,但是有时找不到图像(服务器返回“ 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);
}
}
但是即使如此,我仍然得到一个找不到图像的异常
有什么帮助吗?
谢谢
答案 0 :(得分:2)
我尝试了您的代码,由于您从未实际执行curl,因此$ httpCode响应始终为0。在curl_setopt行之后尝试,如下所示:
curl_setopt($handle, CURLOPT_RETURNTRANSFER, TRUE);
curl_exec($handle);
$httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE);
答案 1 :(得分:0)
从文档中下载文件有两种受支持的方式:
传递字符串以指定将存储响应正文内容的文件的路径:
$client->request('GET', '/stream/20', ['sink' => '/path/to/file']);
传递从fopen()返回的资源以将响应写入PHP流:
$resource = fopen('/path/to/file', 'w');
$client->request('GET', '/stream/20', ['sink' => $resource]);
使用'save_to'
的第三个选项已被弃用:
传递Psr \ Http \ Message \ StreamInterface对象以将响应主体流式传输到打开的PSR-7流。
$resource = fopen('/path/to/file', 'w');
$stream = GuzzleHttp\Psr7\stream_for($resource);
$client->request('GET', '/stream/20', ['save_to' => $stream]);
详细了解Guzzle Sink。