PHP скачать картинки (с определённой страницы сайта)


Понадобилась на днях функция, которая скачивает с определённого сайта все картинки. Если быть точнее, то отправляем в функцию url-ссылку и директорию. В результате в директория наполняется картинками из указанной ссылки. Как-то так.

В общем случае нужно скачать картинки (изображения) с сайта.

Приступим.

Для начала накидаем две функции. Первая будет возвращать массив ссылок на изображения, а вторая скачивать их в указанную папку.

Для первой функции я возьму заготовку и статьи CURL/PHP скачать страницу. Ради простоты изложения, функцию описанную в той статье, я вставлю внутрь этой.

get_img_in_dir("http://lavrik-v.ru/", "temp");


function get_img_in_dir($url, $dir) {

    $host = parse_url($url, PHP_URL_HOST); // Нахожу хост в урле

    /* Для начала скачиваю код страницы... */
    $curl = curl_init(); // Инициализирую CURL
    curl_setopt($curl, CURLOPT_HEADER, 0); // Отключаю в выводе header-ы
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //Возвратить данные а не показать в браузере
    curl_setopt($curl, CURLOPT_URL, $url); // Указываю URL
    $code = curl_exec($curl); // Получаю данные
    curl_close($curl); // Закрываю CURL сессию
    
    

    // Код скачан и сидит в переменной $code
    // Теперь можно через регулярные выражения
    // вынимать из него ссылки
    $arrayImg = array(); // Массив для ссылок изображений
    $regex = '/<\s*img[^>]*src=[\"|\'](.*?)[\"|\'][^>]*\/*>/i';
    preg_match_all($regex, $code, $arrayImg);

    // Теперь в $arrayImg[1] сидит массив url-ами изображений

    // Исправляю все ссылки на абсолютные и скачиваю их...
    for($i=0; $i<count($arrayImg[1]); $i++) {
        
        $path = parse_url($arrayImg[1][$i], PHP_URL_PATH); // Нахожу в ссылке путь
        $absolute_url = 'http://'.$host.$path; // Создаю абсолютный путь
   
        // Вот так я нахожу имя файла....
        $name = explode("/", $absolute_url);
        $name = $name[count($name)-1];

        // Скачиваю изображение
        if (!copy($absolute_url, $dir.'/'.$name)) {
            echo '<p style="color:red;">Error copy - '.$name.'</p>';
            }      
        
    }
}

Код хорошо прокомментирован, поэтому углубляться в строчки кода не буду.

При помощи шпаргалки по регулярным выражениям, я составил выражение, которое находит в коде все ссылки на картинки - /<\s*img[^>]*src=[\"|\'](.*?)[\"|\'][^>]*\/*>/i

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

Имена изображениям будут устанавливаться те, который были у них на сайте.

 

 


Тэги:

Комментарии: 0

Прокомментировать »

 
 
 

Прокомментировать

 
 
Сообщение *
 
Проверочный код *
 
 
 
Яндекс.Метрика