Лучший способ сохранить изображение с URL-адреса в php?

Я хотел бы знать лучший способ сохранить изображение из URL-адреса в php.

На данный момент я использую

file_put_contents($pk, file_get_contents($PIC_URL)); 

что не является идеальным. Я не могу использовать завиток. Есть ли способ специально для этого?

Использование file_get_contents в порядке, если файл не очень большой. В этом случае вам действительно не нужно держать все в памяти.

Для большого поиска вы можете открывать удаленный файл, загружать его, скажем, 32 Кбайт за раз, и записывать его локально в цикле до тех пор, пока все файлы не будут прочитаны.

Например:

 $fout = fopen('/tmp/verylarge.jpeg', 'w'); $fin = fopen("http://www.example.com/verylarge.jpeg", "rb"); while (!feof($fin)) { $buffer= fread($fin, 32*1024); fwrite($fout,$buffer); } fclose($fin); fclose($fout); 

(Для простоты не требуется проверка ошибок!)

В качестве альтернативы вы можете отказаться от использования оболочек URL-адресов и использовать класс, например HTTP_Request PEAR, или свернуть собственный HTTP-клиентский код с помощью fsockopen и т. Д. Это позволит вам делать эффективные вещи, такие как send If-Modified-Since заголовки, если вы поддерживаете кеш удаленных файлов.

Я бы рекомендовал использовать стратегию Пола Диксона, но заменил fopen на fsockopen () . Причина в том, что некоторые конфигурации серверов запрещают доступ к URL-адресам для fopen () и file_get_contents (). Этот параметр можно найти в php.ini и называется allow_url_fopen.