Тестовые задания PHP
 
ВВЕДЕНИЕ
Иногда перед Вами может возникнуть следующая задача: скачать кучу картинок по 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 консоль найдется с помощью следующих тыков:

  1. Правой кнопкой по значку OpenServer в трее
  2. Дополнительно
  3. Консоль

Дальше наша задача - через консоль зайти в нужную директорию и запустить скрипт. В вышеприведенном примере это будет выглядеть так:

 

cd domains/parser
php index.php

 

 

Вот и все, все ваши картинки начнут скачиваться локально к вам на сервер. Точно также можно получить любые файлы, доступ к которым есть по URL

 

 

 

 


 

Напоминаю, что вопросы можно задать в группе https://t.me/newqosgroup