ВВЕДЕНИЕ
Иногда перед Вами может возникнуть следующая задача: скачать кучу картинок по URL. Чаще всего это происходит при парсинге, либо же просто у Вас есть список URLов. Использовать будем PHP и Open Server, скачивать будем локально, заодно посмотрим каким образом избежать различных настроек времени исполнения скрипта и что делать, если скрипт должен выполняться продолжительное время (избежим 504 ошибки)Задача и решение:
Имеется текстовый файл images.txt, в котором лежит около 1000 URLов картинок. Нам нужно скачать все эти картинки локально. Для начала откроем Open Server, зайдем в папку Domains и создадим папку, например, с именем parser. Внутри создадим файл index.php, а также положим туда наш файл с урлами images.txt
Теперь перейдем непосредственно к скрипту:
<?php
//заголовок с кодировкой
header('Content-Type: text/html; charset=utf-8');
//открываем наш файл с адресами изображений
$var=file_get_contents('images.txt');
//разбиваем строку на массив, в качестве разделителя выступает пробел
//функция explode первым аргументов принимает разделитель, вторым - строку
$images = explode(' ', $var);
//все, есть массив, очищаем его от всяких разных пробелов и прочего
$images = array_map('trim', $images);
//перебираем получившийся массив, получаем имя картинки, для этого просто разбиваем URL по символу "/" и получаем последний элемент массива
foreach ($images as $item){
$text = $item;
$name = explode('/', $text);
$image_name = end($name);
//а тут уже с помощью cUrl обрабатываем файлы
$ch = curl_init($item);
$fp = fopen($image_name, 'wb');
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_exec($ch);
curl_close($ch);
fclose($fp);
}
?>
Всякие мелочи:
Если у вас будет много таких картинок - скорее всего вы лицом к лицу встретитесь с одной из разновидностей ошибок времени выполнения скрипта. Не спешите менять время выполнения PHP скрипта в файле. Не надо лезть в настройки PHP.ini. Не надо ковырять ngnix. Просто запустите данный скрипт с консоли и будет вам счастье. На Open Server консоль найдется с помощью следующих тыков:
- Правой кнопкой по значку OpenServer в трее
- Дополнительно
- Консоль
Дальше наша задача - через консоль зайти в нужную директорию и запустить скрипт. В вышеприведенном примере это будет выглядеть так:
cd domains/parser
php index.php
Вот и все, все ваши картинки начнут скачиваться локально к вам на сервер. Точно также можно получить любые файлы, доступ к которым есть по URL
Напоминаю, что вопросы можно задать в группе https://t.me/newqosgroup