Сохранить все изображения со страницы сайта

Сохранить все изображения со страницы сайта

Скрипт парсит все изображения из тега <img> со страницы сайта, сохраняя структуру директорий и имена файлов.

// URL с которого нужно скачать изображения.
$url = 'http://www.yaplakal.com/forum2/topic1514370.html';

// Директория куда будут сохранятся изображения.
$path = dirname(__FILE__) . '/download';

// Загружать или нет изображения с других доменов.
$external = true;

$html = file_get_contents($url);
preg_match_all('/<img.*?src=["\'](.*?)["\'].*?>/i', $html, $images, PREG_SET_ORDER);

$url = parse_url($url);
$path = rtrim($path, '/');

foreach ($images as $image) {
	if (strpos($image[1], 'data:image/') !== false) {
		continue;
	}

	if (substr($image[1], 0, 2) == '//') {
		$image[1] = 'http:' . $image[1];
	}

	$ext = strtolower(substr(strrchr($image[1], '.'), 1));
	if (in_array($ext, array('jpg', 'jpeg', 'png', 'gif'))) {
		$img = parse_url($image[1]);
		
		// Если файл уже существует
		if (is_file($path . $img['path'])) {
			continue;
		}

		$path_img = $path . '/' .  dirname($img['path']);
		if (!is_dir($path_img)) {
			mkdir($path_img, 0777, true);
		}

		if (empty($img['host']) && !empty($img['path'])) {
			copy($url['scheme'] . '://' . $url['host'] . $img['path'], $path . $img['path']);
		} elseif ($external || ($external == false && $img['host'] == $url['host'])) {
			copy($image[1], $path . $img['path']);
		}
	}
}
PHP
23.12.2016, обновлено 15.02.2020
15314

Комментарии 2

Валерий Яцук Валерий Яцук
15 февраля 2020 в 09:10
А как сделать проверку если картинка существует то не парсить ее
Snipp.ru Snipp.ru
15 февраля 2020 в 10:45
Валерий, в пример добавлена проверка файла.

, чтобы добавить комментарий.

Другие публикации

Работа с FTP в PHP
Протокол FTP – предназначен для передачи файлов на удаленный хост. В PHP функции для работы с FTP как правило всегда доступны и не требуется установка дополнительного расширения.
18082
+2
Автоматическое сжатие и оптимизация картинок на сайте
Изображения нужно сжимать для ускорения скорости загрузки сайта, но как это сделать? На многих хостингах нет...
28008
+8
Работа с API Instagram
В статье описана регистрация клиента, получения access token, примеры использования методов API Instagram на PHP.
23983
+3
Получить фото из Instagram без API
Так как Instagram и Fasebook ограничили доступ к API, а фото с открытого аккаунта всё же нужно периодически получать и...
24556
+7
PHP транслит
PHP функции для перевода текста, ЧПУ, ссылок и имен файлов в транслит.
39483
+10
Примеры использования cURL в PHP
cURL PHP – это библиотека предназначенная для получения и передачи данных через такие протоколы, как HTTP, FTP, HTTPS....
216047
+21