Как скачать файл с другого сервера: fopen, cURL, wget

программирование

Сегодня работал с одним скриптом, граббером. Ему нужно было закачивать файлы с удаленного сайта (изображения, если точнее) и класть их в каталог у себя на сайте. Я решил сделать заметку о способах закачки файлов. Есть несколько.

Первый. С помощью fopen, fread и прочего. Выглядит обычно так:

$fp = @fopen($sourceFileName, «rb»);
$fd = @fopen($origFileName, «w»);
if ($fp && $fd) {
while (!feof($fp)) {
$st = fread($fp, 4096);
fwrite($fd, $st);
}
}
@fclose($fp);
@fclose($fd);

То есть читаем исходный файл в бинарном режиме и сразу же пишем его в свой каталог.

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

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $sourceFileName);
curl_setopt($ch, CURLOPT_TIMEOUT, 300);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$st = curl_exec($ch);
$fd = @fopen($origFileName, «w»);
fwrite($fd, $st);
@fclose($fd);

curl_close($ch);

То есть здесь для чтения используется cURL, а для записи все тот же стандартный метод.

Третий. Почему-то никто никогда не использует команды Unix (или Windows, смотря какой сервер) для подобных операций. Причем на многих хостингах подобный подход не запрещен. Хотя, конечно, лучше было бы, если был бы свой VDS.

Все очень просто. Делаем следующее:

echo `wget http://site.ru/image.jpg`;

И всё. Картинка будет находиться в том же каталоге, откуда была вызывана команда. Можете погуглить и узнать о параметрах запуска. Не на каждом обычном хостинге получится ее применить, зато чертовски клаассно выглядит ;)

Related posts

Оставить комментарий