2010-05-18 2 views
4

Утро все,Сохранение удаленного изображения с помощью cURL?

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

Итак, я хочу сохранить изображение локально, а затем изменить размер и отобразить его как обычно.

Я получил это далеко ...

 $file_name_array = explode('/', $filename); 
     $file_name_array_r = array_reverse($file_name_array); 

     $save_to = 'system/cache/remote/'.$file_name_array_r[1].'-'.$file_name_array_r[0]; 

     $ch = curl_init($filename); 
     $fp = fopen($save_to, "wb"); 

     // set URL and other appropriate options 
     $options = array(CURLOPT_FILE => $fp, 
         CURLOPT_HEADER => 0, 
         CURLOPT_FOLLOWLOCATION => 1, 
         CURLOPT_TIMEOUT => 60); // 1 minute timeout (should be enough) 

     curl_setopt_array($ch, $options); 

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

Это создает файл изображения, но не копировать его accross? Я пропустил пункт?

Cheers guys.

ответ

2

Ну, я отсортирован его! После изучения моих изображений, а не моего кода немного ближе, оказалось, что некоторые из изображений были ошибками на их стороне, а не моими. Как только я выбрал изображение, которое сработало, мой код тоже работал!

Приветствия, как всегда, хотя ребята :)

0

Лично я не люблю использовать функции curl, которые записываются в файл. Попробуйте вместо этого:

$file_name_array = explode('/', $filename); 
    $file_name_array_r = array_reverse($file_name_array); 

    $save_to = 'system/cache/remote/'.$file_name_array_r[1].'-'.$file_name_array_r[0]; 

    $ch = curl_init($filename); 
    $fp = fopen($save_to, "wb"); 

    // set URL and other appropriate options 
    $options = array(CURLOPT_HEADER => 0, 
        CURLOPT_FOLLOWLOCATION => 1, 
        CURLOPT_TIMEOUT => 60, 
        CURLOPT_RETURNTRANSFER, true //Return transfer result 
        ); 

    curl_setopt_array($ch, $options); 
    //Get the result of the request and write it into the file 
    $res=curl_exec($ch); 
    curl_close($ch); 
    fwrite($fp,$res); 
    fclose($fp); 

Но вы можете использовать что-то более простое, без завитка:

$file_name_array = explode('/', $filename); 
$file_name_array_r = array_reverse($file_name_array); 
$save_to = 'system/cache/remote/'.$file_name_array_r[1].'-'.$file_name_array_r[0]; 
$content=file_get_contents($filename); 
$fp = fopen($save_to, "wb"); 
fwrite($fp,$content); 
fclose($fp); 
+0

Спасибо за ответ, хотя я получаю «Неподдерживаемый запрос PUT на http://imagepath.co m/image.jpg не поддерживается. Ссылка # 8.9ea178d5.1274174788.863a82c ". Я, однако, отсортировал его, и именно я был ключом ... – Tom

+0

Просто уведомление: вы должны были использовать' CURLOPT_FILE => $ fp', иначе 'fwrite ($ fp , $ content); 'удваивает потребление памяти. – machineaddict

3

Более простой, вы можете использовать file_put_contents вместо FWRITE:

$file_name_array = explode('/', $filename); 
$file_name_array_r = array_reverse($file_name_array); 
$save_to = 'system/cache/remote/'.$file_name_array_r[1].'-'.$file_name_array_r[0]; 
file_put_contents($save_to, file_get_contents($filename)); 

или всего за 2 строк :)

$file_name_array_r = array_reverse(explode('/', $filename)); 
file_put_contents('system/cache/remote/'.$file_name_array_r[1].'-'.$file_name_array_r[0], file_get_contents($filename)); 
+0

Спасибо за ответ al3cs! К сожалению (или, может быть, к счастью), я больше не работаю над этим проектом, но я все равно буду учитывать ваше решение в следующий раз. , – Tom

Смежные вопросы