Только для читателей Lifeexample возможно открыть интернет-магазин на Moguta.CMS со скидкой в 15%
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 ленту блога.
Комментарии
какая разница между:
($k<=(count($row['image'])-1))
и
($k<count($row['image']))
😉
Никакой )
А можно ли найти с помошью этого скрипта все файлы с расширением .xml на другом сервере, зная только его адрес в интернете.
Нет, слить все XML файлы этим методом невозможно.
Ну, или, если вы используете Denwer, и вам лень возиться с дополнительными библиотеками и конфигами — вот переписанный скрипт сливания картинок:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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, только сегодня наткнулся на ваш блог, очень радуют ваши статьи. Продолжайте в том же духе. 🙂
Александр, спасибо. Увы времени на блог практически не осталось. Второй проект требует постоянного внимания. Но я стараюсь периодически выкладывать интересный материал. Вот например, сегодня выложил эту статью: «jQuery UI sortable – как узнать новую позицию элементов»
Огромное вам спасибо за пример, только вот хоть убей не пойму как сделать, чтоб сохраняло все картинки в корневой каталог без создания папок?
Заранее признателен!
Уберите цикл, оставьте только copy($url,$name);
Здравствуйте! Спасибо за статью! Очень помогло.
Но вот такой вопрос, у вас во втором примере ищутся картинки с определенным расширением, а у меня ситуация такая картинки грузятся со стороннего сайта допустим вот с таким урл: http://lifeexample.ru/?img=drfgdigdfigj943tgjd
причем когда я обращаюсь к этому урл напрямую, ничего не происходит, картинка выдается только на странице самого сайта. Можно ли как-то обойти это?
Хоть статья и старая уже, но может Вы всё же ответите 🙂
Здравствуйте, у меня много ссылок на изображения,я их отфильтровал и создал отдельную страницу с ссылками, вопрос по второму скрипту: категории создаются а картинки не сохраняются, может проблема во второй части кода.Спасибо.
А как сохранить картинки с определенным классом? Например, если
Спасибо!