Я хотел бы знать лучший способ сохранить изображение из 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.