Я пытаюсь загрузить изображение, если оно существует по URL-адресу и, если оно не существует, оно должно вернуть ошибку.
Пока я пробовал это
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
$fp = fopen('images/'.$isbn.'.jpg', 'wb');
curl_setopt($ch, CURLOPT_FILE, $fp);
// don't download content
curl_setopt($ch, CURLOPT_NOBODY, 1);
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
if(curl_exec($ch)!==FALSE){
return 1;
}
else{
return 0;
}
Теперь он возвращает 0
, когда изображение не существует, но поврежденный файл изображения все еще создается.
Теперь я не совсем уверен, еслия должен getimagesize
проверить, существует ли изображение, а затем вызвать мою функцию curl.
if(@getimagesize($remoteImageURL)){
//image exists!
}
Также обратите внимание, что мой скрипт будет выполняться на 14 миллионах записей, поэтому оптимизация имеет решающее значение.
This URL returns an image
https://pictures.abebooks.com/isbn/9780007428540-uk.jpg
This URL returns an xml error
https://pictures.abebooks.com/isbn/9781781108765-uk.jpg
РЕДАКТИРОВАТЬ 1:
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
$content = curl_exec($ch);
$contentType = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
curl_close($ch);
if($contentType=='image/jpeg'){
//download image
}else{
//return error;
}
Является ли приведенный выше код правильным подходом?