ФорумПрограммированиеPHP для идиотов → Как выкачать по http файлы?

Как выкачать по http файлы?

  • ivanscm

    Сообщения: 1251 Репутация: N Группа: Джедаи

    Spritz 1 июля 2010 г. 2:26

    Понадобилось мне значит грабер файлового контента одного сайтика написать. Ссылки я пропарсил с него, допустим они в массиве у меня. Как можно на php выкачать кучу файлов, в потоках, с очередью да еще и узнавать сколько закачено? curl?

    Как узнать запущен ли скрипт? писать что нить в файл?
    С возвращением, Пiха!
  • Faster

    Сообщения: 1159 Репутация: N Группа: Кто попало

    Spritz 1 июля 2010 г. 3:09, спустя 43 минуты 30 секунд

    wget или curl , мне больше первый нравится
    как вывести прогресс закачки - хз
    с очередью - распараллеливаешь потоки, статус пишешь куда нибудь, при следующем запуске проверяешь статус
    я пишу в БД + дату, если дата больше опред числа - процесс уходит в треш
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 1 июля 2010 г. 3:34, спустя 24 минуты 55 секунд

    Faster, wget и curl не умеют многопоточно качать.

    я тоже думал что умеют :)
    Сапожник без сапог
  • relictx

    Сообщения: 307 Репутация: N Группа: Адекваты

    Spritz 1 июля 2010 г. 3:50, спустя 15 минут 36 секунд

    downloadmaster :DDD
  • Faster

    Сообщения: 1159 Репутация: N Группа: Кто попало

    Spritz 1 июля 2010 г. 3:54, спустя 4 минуты 19 секунд

    phpdude,
    для одного потока имелось ввиду
    а как в граббере рулить потоками я не писал :)
    Спустя 131 сек.
    хотя прогресс можно узнать сравнив filesize то что скачалось и размерчик дернутый их хидера на сервере.
    так что ТС - все в твоих руках :)
  • Givi

    Сообщения: 2284 Репутация: N Группа: Адекваты

    Spritz 1 июля 2010 г. 4:09, спустя 14 минут 47 секунд

    Думаю для граббера нахер не нужен прогресс, особенно учитывая что это под один сайт пишется. Вместо прогресса достаточно будет сделать запись по общему кол-ву файлов для скачивания и после каждого скаченного обновлять счетчик закачек. Примерный прогресс будет видно, а большего нах не нужно по сути.
  • ivanscm

    Сообщения: 1251 Репутация: N Группа: Джедаи

    Spritz 1 июля 2010 г. 4:19, спустя 9 минут 32 секунды

    Так, а допустим время работы скрипта 60 секунд, значит скрипт отвечать не будет?
    С возвращением, Пiха!
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 1 июля 2010 г. 4:22, спустя 3 минуты 17 секунд

    ололло!!!

    php curl ext

    CURLOPT_WRITEFUNCTION   The name of a callback function where the callback function takes two parameters. The first is the cURL resource, and the second is a string with the data to be written. The data must be written by using this callback function. Must return the exact number of bytes written or this will fail.


    я пользовался, катит, было приятно сомтреть бегущие цифарке
    Сапожник без сапог
  • Givi

    Сообщения: 2284 Репутация: N Группа: Адекваты

    Spritz 1 июля 2010 г. 7:54, спустя 3 часа 31 минуту 50 секунд

    ivanscm, сделай чтоб было больше чем 60 секунд. Или вообще по крону его пиздяч.
  • ivanscm

    Сообщения: 1251 Репутация: N Группа: Джедаи

    Spritz 1 июля 2010 г. 8:56, спустя 1 час 2 минуты 8 секунд

    Да, я решил по крону проверять размер исходный и текущий, и докачивать.
    С возвращением, Пiха!
  • ivanscm

    Сообщения: 1251 Репутация: N Группа: Джедаи

    Spritz 1 июля 2010 г. 9:33, спустя 37 минут 32 секунды

    пока курю http://www.ibm.com/developerworks/ru/library/os-php-multitask/index.html
    Спустя 162 сек.
    о! http://i-novice.net/parallelim-process-na-php/
    С возвращением, Пiха!
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 1 июля 2010 г. 9:34, спустя 30 секунд


    пока курю http://www.ibm.com/developerworks/ru/library/os-php-multitask/index.html
    Спустя 162 сек.
    о! http://i-novice.net/parallelim-process-na-php/
    полная хуйня статья, хуйня потому что идея - полная хуйня.
    Сапожник без сапог
  • ivanscm

    Сообщения: 1251 Репутация: N Группа: Джедаи

    Spritz 1 июля 2010 г. 9:39, спустя 4 минуты 43 секунды

    и что теперь не морочить голову? а так руки чешуться попробывать :)
    Спустя 206 сек.
    а если еще так ебануть http://php.net/manual/en/function.curl-multi-select.php
    С возвращением, Пiха!
  • Faster

    Сообщения: 1159 Репутация: N Группа: Кто попало

    Spritz 1 июля 2010 г. 10:43, спустя 1 час 4 минуты 27 секунд

    подсмотренное решение:

    foreach($processes as $p)
    {
    passthru('('.__PHP.' -f '.PATH_DIR.'cron/grabber.php '.$p.' & ) >> /dev/null 2>&1');
    }

    в качестве $p у меня передается айдишник записи в БД таблице
    мультикурлы сосут по сравнению с этим способом
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 1 июля 2010 г. 10:49, спустя 6 минут 21 секунду

    мультикурлы сосут по сравнению с этим способом

    да ну? давай поспорим, а?
    Спустя 27 сек.
    что будет с твоим сервером, если запустить например 500 паралельных таких "задач"? правильно, память кончится меньше чем за 5 секунд.
    Спустя 75 сек.
    а если еще так ебануть http://php.net/manual/en/function.curl-multi-select.php

    для пхп самый верный метод, остальное изза невыводимых через зад каллоидных образований, создающих жуткую мигрень в головном мозге и подобные куски "кода"

    foreach($processes as $p)
    {
    passthru('('.__PHP.' -f '.PATH_DIR.'cron/grabber.php '.$p.' & ) >> /dev/null 2>&1');
    }

    Сапожник без сапог

Пожалуйста, авторизуйтесь, чтобы написать комментарий!