Добро пожаловать на авторский блог Авдеева Марка.

Только для читателей Lifeexample возможно открыть интернет-магазин на Moguta.CMS со скидкой в 15%

<<< Сайт для iPhone || Стили H1 >>>

php сохранение картинки

29.01.2012
php сохранение картинки

Здравствуй уважаемый читатель блога LifeExample, иногда случается так, что вручную сохранить картинки со страницы какого либо ресурса, немного накладно. Если картинок много, то задачу автоматического сохранения их в файл можно переложить на плечи PHP. Статья php сохранение картинки, обещает быть очень короткой, и нести в себе минимум лишней информации.

Для того чтобы нам с помощью php скрипта можно было осуществить сохранение картинки, нужно изучить предназначение функции copy(). Не трудно догадаться, что данная функция что-то копирует, а именно она занимается копированием и сохранением файлов, в том числе и картинок. В параметры этой функции нужно передать путь к картинке, которую нужно сохранить и название, которое получит сохраненная картинка.

Скопировать одну картинку с помощью php (Задача №1)

Допустим мы имеем url нужного изображения:

1
$url="http://lifeexample.ru/logo.jpg"

Мы хотим скопировать ее себе на сервер и дать имя «some_image.jpg»

1
$name="some_image.jpg"

Передадим в функцию copy, наши параметры

1
copy ( $url, $name );

Запускаем скрипт, и смотрим на содержимое директории, из которой он был вызван. Если все прошло гладко, то мы обнаружим сохраненную картинку.

Скопировать все картинки со страницы с помощью php (Задача №2)

Зная как сохранить одну картинку, не сложно написать парсер всей страницы, с последующим сохранением найденных изображений. Для этого советую воспользоваться материалом изложенном в статье: «Регулярные выражения в PHP«.

Сразу приведу код рабочего php скрипта для сохранения всех картинок со страницы.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Header('Content-type: text/html; charset=utf-8');
$url="http://lifeexample.ru/";//url страницы, с которой будем копировать все картинки
function getContentPage($url){//функция для получения исходного кода страницы
    $c = curl_init($url);      
    curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($c, CURLOPT_FOLLOWLOCATION, 1);
    $text = curl_exec($c);
    curl_close($c);    
    return $text;
}
//регулярнымвыражением парсим страницу, и находим все картники с расширением png и jpg
preg_match_all("'<img\s+src=\"(\S*.(png|jpg))\"'si",getContentPage($url),$result);     
foreach($result[1] as $name)
        {
            $row['image'][]=$name;
        }
$k=0;
//перебираем все найденные картинки, создаем для них директории, и сохраняем изображения
 while ($k<=(count($row['image'])-1))
 {
    $url=$row['image'][$k];
    $name= $row['image'][$k];
    $name=str_replace("http://lifeexample.ru/","",$name);
    echo ($k+1).") Успешно сохранена картинка: <b>".$name."</b><br/>";
    $dir="";
    $result1=explode("/", $name);          
        for($i=0 ; $i<=(count($result1)-2); $i++ )
                {      
                    if (!file_exists($dir.$result1[$i])){
                        mkdir($dir.$result1[$i], 0777);
                    }          
                    $dir.=$result1[$i]."/";
                }
        copy($url,$name);      
    $k++;  
  }
?>

Скрипт с помощью функции curl_init() получает содержимое нужной страницы и регулярным выражением выбирает все картинки с расширением png и jpg. Далее для каждой из картинок создается определенная ссылкой структура папок, и функцией copy() сохраняется на наш сервер.

Внимание! При использовании функции curl_init() на денвере, не редко вы можете столкнуться с ошибкой ее использования. Если это случилось, то прочтите решение этой проблемы в статье Fatal error: Call to undefined function curl_init()

Результатом работы данного скрипта вы увидите: полностью скопированную структуру картинок и папок с сайта источника, на вашем сервере. Кстати говоря, хоть и статья «php сохранение картинки«, подразумевает сохранение только картинок, но с помощью приведенного скрипта, можно сохранить все файлы с сайта, немного изменив код. Если вас заинтересует, я напишу о том как это сделать.

Чтобы не пропустить публикацию следующей статьи подписывайтесь на рассылку по E-mail или RSS ленту блога.

Нравится

Комментарии

  • Samigo

    какая разница между:
    ($k<=(count($row['image'])-1))
    и
    ($k<count($row['image']))
    😉

  • Александр

    А можно ли найти с помошью этого скрипта все файлы с расширением .xml на другом сервере, зная только его адрес в интернете.

    • Нет, слить все XML файлы этим методом невозможно.

  • Alexander

    Ну, или, если вы используете Denwer, и вам лень возиться с дополнительными библиотеками и конфигами — вот переписанный скрипт сливания картинок:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    $text = file_get_contents("http://lifeexample.ru/");

    preg_match_all("'<img\s+src=\"(\S*.(png|jpg))\"'si", $text, $result);      
    foreach($result[1] as $name) {
        $row['image'][]=$name;
    }

    $k=0;

    while ($k<=(count($row['image'])-1)) {
        $text = $row['image'][$k];
        $name= $row['image'][$k];
        $name=str_replace("http://lifeexample.ru/","",$name);
        echo ($k+1).") Успешно сохранена картинка: <b>".$name."</b><br/>";
        $dir="";
        $result1=explode("/", $name);          
        for($i=0 ; $i<=(count($result1)-2); $i++ ) {
            if (!file_exists($dir.$result1[$i])) {
                mkdir($dir.$result1[$i], 0777);
            }
            $dir.=$result1[$i]."/";
        }
        copy($text, $name);      
        $k++;  
    }

    🙂

    P.S.
    Mark, только сегодня наткнулся на ваш блог, очень радуют ваши статьи. Продолжайте в том же духе. 🙂

  • skyp

    Огромное вам спасибо за пример, только вот хоть убей не пойму как сделать, чтоб сохраняло все картинки в корневой каталог без создания папок?
    Заранее признателен!

    • Уберите цикл, оставьте только copy($url,$name);

  • Аноним

    Здравствуйте! Спасибо за статью! Очень помогло.
    Но вот такой вопрос, у вас во втором примере ищутся картинки с определенным расширением, а у меня ситуация такая картинки грузятся со стороннего сайта допустим вот с таким урл: http://lifeexample.ru/?img=drfgdigdfigj943tgjd
    причем когда я обращаюсь к этому урл напрямую, ничего не происходит, картинка выдается только на странице самого сайта. Можно ли как-то обойти это?
    Хоть статья и старая уже, но может Вы всё же ответите 🙂

  • Евгений

    Здравствуйте, у меня много ссылок на изображения,я их отфильтровал и создал отдельную страницу с ссылками, вопрос по второму скрипту: категории создаются а картинки не сохраняются, может проблема во второй части кода.Спасибо.

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

    Подписаться на комментарии к этой статье по RSS

    Размещение статей и контекстных ссылок
    Бесплатная CMS для вашего магазина
    Яндекс.Метрика