Сохраняйте изображения с помощью CURL, иногда они сохраняют пустые изображения

У меня есть этот скрипт, где я получаю ссылки на изображения с определенных веб-сайтов, поэтому я создал функцию, в которой я передаю ссылку на изображение и имя источника веб-сайта, который будет использоваться для размещения изображений в соответствующих каталогах.

Однако иногда эта функция не будет работать должным образом, случайным образом она сохранит изображение, однако изображение в основном пустое, поэтому просто сохранит пустой файл с исходным именем файла из $img_link, но не сможет показать фактическое изображение.

В этом случае, если это произойдет, я попытался вернуть мне путь к изображению по умолчанию. Но он этого не делает и возвращает пустое изображение, как описано выше.

function saveIMG($img_link, $source){

$name = basename($img_link); // gets basename of the file image.jpg
$name = date("Y-m-d_H_i_s_") . mt_rand(1,999) . "_" .$name;
if (!empty($img_link)){
    $ch = curl_init($img_link);
    $fp = fopen("images/$source/$name", 'wb');
    curl_setopt($ch, CURLOPT_FILE, $fp);
    curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
    curl_setopt($ch, CURLOPT_HEADER, 0);

    $result = curl_exec($ch);
    curl_close($ch);
    fclose($fp);

    $name ="images/$source/$name";
    return $name;
}
else {
    $name = "images/news_default.jpg";
    return $name;
   }
}

У вас есть идея получше, как сделать так, чтобы получить изображение не удалось?

Спасибо

2 ответа

Решение

file_get_content всегда хорошая альтернатива cURL.

Но, если вы хотите / должны использовать cURL:

$ch = curl_init("www.path.com/to/image.jpg");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); //Return the transfer so it can be saved to a variable
$result = curl_exec($ch);  //Save the transfer to a variable
if($result === FALSE){//curl_exec will return false on failure even with returntransfer on
    //return? die? redirect? your choice.
}
$fp = fopen("name.jpg", 'w'); //Create the empty image. Extension does matter.
fwrite($fp, $result); //Write said contents to the above created file
fclose($fp);  //Properly close the file

И это все. Протестировал и все работает.

Использовать файл получить содержимое

$data = file_get_contents($img_link);
//check  it return data or not
if ( $data === false )
{
   echo "failed";
}
Другие вопросы по тегам