@midarovrk

PHP скрипт скачивающий изображение со страницы на свой сервер?

Всем привет! Пожалуйста помогите немного отрегулировать скрипт.

<?php
get_img_in_dir("http://www.jurnalu.ru/online-reading/comicsonline/gothambymidnight2014/gothambymidnight2014004/5", "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
    curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12');
    curl_setopt($curl, CURLOPT_REFERER, "http://www.jurnalu.ru/");
    $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); // Нахожу в ссылке путь
        $path2 = parse_url($arrayImg[1][$i], PHP_URL_QUERY); // Нахожу в ссылке путь
        $absolute_url = 'http://comicsonline.ru'.$path.'?'.$path2; // Создаю абсолютный путь
    
        // Вот так я нахожу имя файла....
        $name = explode("/", $absolute_url);
        $name = $name[count($name)-1];
 
        // Скачиваю изображение
        if (!copy($absolute_url, $dir.'/'.$name)) {
            echo '<p style="color:red;">Error copy - '.$name.'</p>';
            }      
         
    }
}
?>


Что делает скрипт:
Заходит на указанную страницу, находит ссылку на изображение вот такого вида

http://comicsonline.ru/1/gothambymidnight2014/004/5.png?st=lZTSjOiDOdU8KuQXYVuRqw&e=1445256843

далее скачивает и сохраняет файл в указанную папку temp на своём сервере.

В итоге на сервере оказывается файл вот с таким именем - 5.png?st=lZTSjOiDOdU8KuQXYVuRqw&e=1445256843
В таком виде изображение не открывается, нужно удалить с имени это - ?st=lZTSjOiDOdU8KuQXYVuRqw&e=1445256843 и тогда всё заработает.

Так вот, как можно сделать чтобы скрипт сам автоматически записывал файл на сервер уже без этого хэша? Т.е. вот так 5.png
  • Вопрос задан
  • 332 просмотра
Решения вопроса 1
dimonchik2013
@dimonchik2013
non progredi est regredi
скриптец где-то спионерил?

ссылки регекспами получаешь, а убрать регекпами не можешь? ))
вообще тут еще проше: в твоем $name
php.net/manual/en/function.strrchr.php находишь вхождение "?"
и
php.net/manual/en/function.substr.php получаешь подстроку от начала до найденного "?"
см. первую ссылку - там сразу после описания приведены примеры, только там с директориями

ну а если по взрослому делать - URL положено обрабатывать функцией
php.net/manual/en/function.parse-url.php

а если еще взрослее - и ссылки со страницы положено получать библиотекой
simplehtmldom.sourceforge.net/manual.htm
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы