За последние 24 часа нас посетили 54194 программиста и 1780 роботов. Сейчас ищут 1084 программиста ...

Скачать файл с другого URL

Тема в разделе "PHP для новичков", создана пользователем 715kg, 12 сен 2013.

  1. 715kg

    715kg Активный пользователь

    С нами с:
    2 мар 2013
    Сообщения:
    147
    Симпатии:
    0
    Здравствуйте, такой вопрос. Есть ссылки, такого вида.

    http://сайт.ру/maps/cs16/zm_dust2/?dl=zm_dust2.zip

    При переходе скачиваеться архив zm_dust2.zip

    Есть скрипт

    Код (Text):
    1. <?PHP
    2. if (!empty($_GET['url']))
    3. {
    4. function filesize_get($file1)
    5. {
    6. // проверяем существует ли файл
    7. if(!file_exists($file1)) return "Файл отсутствуетxzxz.";
    8. //определяем размер файла
    9. $filesize = filesize($file1);
    10. // Если размер переданного в функцию файла больше 1кб
    11. if($filesize > 1024)
    12. {
    13. $filesize = ($filesize/1024);
    14. // если размер файла больше одного килобайта
    15. // пересчитываем в мегабайтах
    16. if($filesize > 1024)
    17. {
    18. $filesize = ($filesize/1024);
    19. // если размер файла больше одного мегабайта
    20. // пересчитываем в гигабайтах
    21. if($filesize > 1024)
    22. {
    23. $filesize = ($filesize/1024);
    24. $filesize = round($filesize, 1);
    25. return $filesize." ГБ";
    26. }
    27. else
    28. {
    29. $filesize = round($filesize, 1);
    30. return $filesize." MБ";
    31. }
    32. }
    33. else
    34. {
    35. $filesize = round($filesize, 1);
    36. return $filesize." Кб";
    37. }
    38. }
    39. else
    40. {
    41. $filesize = round($filesize, 1);
    42. return $filesize." байт";
    43. }
    44. }
    45. $file = basename($_GET['url']);
    46. if (file_get_contents($_GET['url']))
    47. {
    48. $content = file_get_contents($_GET['url']);
    49. $f = fopen( "$file", "w" );
    50. if (fwrite( $f, $content ) === FALSE)
    51. {
    52. echo "Не могу произвести запись в файл.";
    53. exit;
    54. }
    55. else {$filesize = filesize_get($file); echo " Файл <font color='red'>" .$file ."</font> записан.".$filesize;
    56. fclose( $f );}
    57. }
    58. else echo "Не могу качать файл.";
    59. }
    60. ?>
    Но вот почему то он по этой ссылке качать не хочет. Почему, не пойму, качает только с прямых путей. А это вроде как через GET запрос сделали. Как с таких ссылок качать?
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    там может быть редирект банальный. смотри заголовки ответа.
     
  3. 715kg

    715kg Активный пользователь

    С нами с:
    2 мар 2013
    Сообщения:
    147
    Симпатии:
    0
    Подскажите как посмотреть заголовки, если не сложно.

    Добавлено спустя 9 минут 11 секунд:
    Сделал так, но что то не работает(


    Код (Text):
    1. //Инициализируем CURL-сессию
    2.     $ch = curl_init();
    3.     //Устанавливаем для работы нужный файл
    4.     curl_setopt($ch, CURLOPT_URL, 'http://***********/maps/cs16/zm_dust2/?dl=zm_dust2.zip');
    5.     //Открываем "поток" для сохранения файла на Вашем сервере:
    6.     $fp = fopen($file, "w+");
    7.     //Нагло подделываем REFERER:
    8.     curl_setopt($ch, CURLOPT_REFERER, $reffer);
    9.     curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 5.2; rv:6.0.2) Gecko/20100101 Firefox/6.0.2');
    10.     //Устанавливаем опцию хождения по всем редиректам
    11.     curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
    12.     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
    13.     curl_setopt($ch, CURLOPT_HEADER, 0);
    14.     curl_setopt($ch, CURLOPT_COOKIESESSION, 1);
    15.     // грузим куки
    16.     curl_setopt($ch, CURLOPT_COOKIE, 'cookie.txt');
    17.     //Выполняем CURL-процедуру с заданными параметрами:
    18.     $content = curl_exec($ch);
    19.     //Закрываем сеанс CURL:
    20.     curl_close($ch);
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    заголовки ответа можно глянуть в том же фаербаге на вкладке network например.

    возможно там стоит защита от скачивания. надо прикинуться браузером.
     
  5. 715kg

    715kg Активный пользователь

    С нами с:
    2 мар 2013
    Сообщения:
    147
    Симпатии:
    0
    Код (Text):
    1. Request URL:http://my-cs.ru/maps/cs16/zm_dust2/?dl=zm_dust2.zip
    2. Request Method:GET
    3. Status Code:200 OK
    4. Request Headersview source
    5. Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    6. Accept-Encoding:gzip,deflate,sdch
    7. Accept-Language:ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
    8. Connection:keep-alive
    9. Cookie:PHPSESSID=egelmm9199hta5tvna4bth9727; _rbu=13788951042600672713; arp_scroll_position=5190; __utma=30576419.1397166111.1377086615.1378914803.1378931400.6; __utmb=30576419.9.10.1378931400; __utmc=30576419; __utmz=30576419.1378895104.3.2.utmcsr=yandex|utmccn=(organic)|utmcmd=organic|utmctr=%D1%81%D0%BA%D0%B0%D1%87%D0%B0%D1%82%D1%8C%20%D0%BA%D0%B0%D1%80%D1%82%D1%83%20de_dust2%20%D0%B4%D0%BB%D1%8F%20cs%201.6; topyugaru=1; hotlog=1
    10. Host:my-cs.ru
    11. User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36
    12. Query String Parametersview sourceview URL encoded
    13. dl:zm_dust2.zip
    14. Response Headersview source
    15. Accept-Ranges:bytes
    16. Cache-Control:no-store, no-cache, must-revalidate, post-check=0, pre-check=0
    17. Connection:keep-alive
    18. Content-Disposition:attachment; filename=zm_dust2.zip
    19. Content-Length:1631885
    20. Content-Type:application/octet-stream
    21. Date:Wed, 11 Sep 2013 21:02:31 GMT
    22. Expires:Thu, 19 Nov 1981 08:52:00 GMT
    23. Pragma:no-cache
    24. Server:nginx
    25. X-Powered-By:PHP/5.4.16
    Посмотреть то посмотрел. А вот что делать дальше не знаю( Новичок(
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ну похоже, что сервер отдает файл.
    а записать-то в файл ты и забыл =)
     
  7. 715kg

    715kg Активный пользователь

    С нами с:
    2 мар 2013
    Сообщения:
    147
    Симпатии:
    0
    Что забыл?) В файл cookie.txt ? Или в какой?
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    допиши в конец скрипта var_dump($content);
     
  9. 715kg

    715kg Активный пользователь

    С нами с:
    2 мар 2013
    Сообщения:
    147
    Симпатии:
    0
    ЗАписал в файл сокет, теперь браузер выдает такую ошибку

    Невозможно загрузить веб-страницу, так как не поступили данные от сервера.
    Код ошибки: ERR_EMPTY_RESPONSE

    Уже дописал. Не хочет работать(

    Добавлено спустя 3 минуты 9 секунд:
    Он файл то записывает. Но вот только весит он 0. И не открывает его.

    Вообщем вот что использую.

    Код (Text):
    1. <?php
    2. //Инициализируем CURL-сессию
    3.     $ch = curl_init();
    4.     //Устанавливаем для работы нужный файл
    5.     curl_setopt($ch, CURLOPT_URL, 'http://my-cs.ru/maps/cs16/zm_dust2/?dl=zm_dust2.zip');
    6.    $file = 'zm_dust2.zip';
    7.  //Открываем "поток" для сохранения файла на Вашем сервере:
    8.     $fp = fopen($file, "w+");
    9.     //Нагло подделываем REFERER:
    10.     curl_setopt($ch, CURLOPT_REFERER, $reffer);
    11.     curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36');
    12.     //Устанавливаем опцию хождения по всем редиректам
    13.     curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
    14.     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
    15.     curl_setopt($ch, CURLOPT_HEADER, 0);
    16.     curl_setopt($ch, CURLOPT_COOKIESESSION, 1);
    17.     // грузим куки
    18.     curl_setopt($ch, CURLOPT_COOKIE, 'cookie.txt');
    19.     //Выполняем CURL-процедуру с заданными параметрами:
    20.     $content = curl_exec($ch);
    21.     //Закрываем сеанс CURL:
    22.     curl_close($ch);
    23.     var_dump($content);
    24. ?>

    В файл cookie.txt

    Прописал

    PHPSESSID=egelmm9199hta5tvna4bth9727; _rbu=13788951042600672713; arp_scroll_position=5190; __utma=30576419.1397166111.1377086615.1378914803.1378931400.6; __utmb=30576419.9.10.1378931400; __utmc=30576419; __utmz=30576419.1378895104.3.2.utmcsr=yandex|utmccn=(organic)|utmcmd=organic|utmctr=%D1%81%D0%BA%D0%B0%D1%87%D0%B0%D1%82%D1%8C%20%D0%BA%D0%B0%D1%80%D1%82%D1%83%20de_dust2%20%D0%B4%D0%BB%D1%8F%20cs%201.6; topyugaru=1; hotlog=1

    Неужели что то не так делаю опять(
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    дык вардамп что показал?
     
  11. 715kg

    715kg Активный пользователь

    С нами с:
    2 мар 2013
    Сообщения:
    147
    Симпатии:
    0
    ничего ((((
     
  12. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ну попробуй контент в файл записать и посмотри что внутре