Скачиваем картинку при помощи file_get_contents

Для тех, кто не знаком с возможностями cURL, есть способ получить контент стороннего сайта стандартными средствами PHP. Но не забывайте, что для этого в настройках конфигурации Вашего веб-сервера должна быть включена опция «allow_url_fopen». Также может случиться так, что со стороны веб-сервера, откуда Вы собираетесь получить контент, может стоять защита и в результате выполнения скрипта Вам будет возвращаться пустая страница.

Давайте на примере разберем, как можно скачать картинку со стороннего сайта на свой веб-сервер.

Как это работает:

Создайте каталог, в который будет производиться запись изображений, например img, установите на этот каталог права для записи (0755 или 0777). Создайте рядом с этим каталогом файл PHP и добавьте в него следующий код:

<?php
$img_url = "http://www.google.com/images/icons/ui/doodle_plus/doodle_plus_google_logo_on_grey.gif";
$Headers = @get_headers($img_url);
if(preg_match("|200|", $Headers[0])) {
	$image = file_get_contents($img_url);
	file_put_contents(dirname(__FILE__)."/img/logo.gif", $image);
} else {
	echo "Not Found";
}
?>

Разберем подробнее. Для начала в переменную $img_url мы задаем ссылку на изображение, которое хотим скачать. Далее получаем заголовки этой ссылки, и если нам возвращается контент, проверяем наличие кода ошибки, если код равен 200 (OK, т.е. такая страница существует), выполняем функцию сохранения изображения. Для этого передаем контент ссылки в переменную $image = file_get_contents($img_url); и сохраняем в наш каталог с указаннием именем файла file_put_contents(dirname(__FILE__)."/img/logo.gif", $image);

В качестве примера на наш сервер сохраняется изображение логотипа Google.

Также Вы можете скачать код скрипта из вложения в конце статьи


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

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

0 / 2500 Ограничение символов
Ваш текст должен быть в пределах 10-2500 символов
2 Комментарии | Добавить свои
  • Гость - Александр

    Очень помог скрипт, вопрос можно не по одной картинке , а сразу 5 к примеру вытянуть как-то, я пока новичек в php :(

    Нравится 0 Короткий URL:
  • Да, конечно же можно, но только через цикл. Создайте массив ссылок на изображения, предложенный выше код оберните в цикл for или foreach (как Вам будет удобнее), который будет идти по составленному Вами массиву ссылок, и соответственно в переменную $img_url будете подставлять значение элемента массива.
    Но есть одно "но", это всего лишь пример, который лучше использовать совместо с ajax, т.к. время выполнения скрипта ограничено сервером, и если цикл не успеет обработать Ваш массив ссылок на картинки за отведенное сервером время, то скрипт упадет, в то время как через ajax Вы можете последовательно передавать ссылки на изображения и скачивать их поштучно.

    Нравится 0 Короткий URL: