2015-04-08 1 views
2

У меня есть этот скрипт, где я получаю ссылки на изображения с определенных сайтов, поэтому я создал функцию, в которой передаю ссылку на изображение и исходное имя веб-сайта, которое будет использоваться для размещения изображения в соответствующих каталогах.Сохранить изображения с помощью 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; 
    } 
} 

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

Благодаря

ответ

5

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

Но, если вы хотите/должны использовать 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 

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

+0

Это хорошо, но я бы положил 'fopen()' * после того, как * '$ result' будет собран, чтобы вы могли проверить результат и посмотреть, действительно ли это, даже до того, как вы начнете открывать файл для записи , – ghoti

+0

Хорошая точка. Я отредактировал ответ, чтобы отразить ваш комментарий. – Andrew

+0

@ Андрей, я ранее использовал file_get_content, но я думаю, что использование cURL показало лучшие результаты. В любом случае я изменил свою функцию, используя ваш совет, и пока он отлично работает. Спасибо человеку :) –

1

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

$data = file_get_contents($img_link); 
//check it return data or not 
if ($data === false) 
{ 
    echo "failed"; 
}