Как добиться стабильной работы с FTP

Тема в разделе "PHP", создана пользователем Abliganto, 17 апр 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Abliganto

    Abliganto Постоялец

    Регистр.:
    30 ноя 2009
    Сообщения:
    111
    Симпатии:
    46
    Доброго времени суток, коллеги. Тема не совсем для начинающих.

    Есть интересная задача, научить PHP нормально работать с FTP.

    Проблема: скрипт закачивает по FTP файл большого размера (10минут и дольше), но в конце всегда выдаёт ошибку якобы файл не был успешно загружен, хотя на самом деле файл успешно залился.

    Умные люди подсказали что для загрузки файла используется отдельное соединение и пока файл загружается, основное соединение тухнет, после чего PHP пытается проверить по основному (закрытому сервером) соединению узнать результат загрузки и бреется.

    Это в теории, может кто сталкивался на практике? Теоретически нужно проверить:

    1) жив ли ещё сервер, если нет, переподключиться
    тут можно отправить какую-нибудь команду на сервер, например, NOOP (интересно, можно-ли узнать открыто соединение или нет, есть ли в PHP общий пул текущих соединений?)

    2) докачался ли файл, если нет, то докачать

    Используются стандартные ф-ции ftp_* Для загрузки используется обычный или асинхронный режим с индикатором прогресса.

    Какие есть мнения на даннй счёт? Больше интересует практический опыт, т.к. код мне написать не сложно и самому :)
     
  2. admLoki

    admLoki генератор случайного PHP

    Регистр.:
    14 сен 2006
    Сообщения:
    481
    Симпатии:
    93
    Первая мысль — не использовать PHP, т.к. распараллеливание в PHP просто никакое.
     
  3. Abliganto

    Abliganto Постоялец

    Регистр.:
    30 ноя 2009
    Сообщения:
    111
    Симпатии:
    46
    Максимум что удалось наковырять по теме - использование stream* ф-ций. Но похоже они не дают больше возможностей чем сам ftp экстеншен.

    Добавлено через 2 минуты
    Внешний FTP клиент. Есть примеры для linux? Важна стабильность. Не важно чем заливать, главное чтобы быстро и стабильно (с докачкой в случае обрыва).

    Но PHP решение всё равно будет сделано.
     
  4. admLoki

    admLoki генератор случайного PHP

    Регистр.:
    14 сен 2006
    Сообщения:
    481
    Симпатии:
    93
    Попробуйте fletch, либо любой другой неинтерактивный клиент.
    С интерактивным вы всё равно ничего на PHP не добьётесь. Если, конечно, не научите PHP нормально работать с IO.
     
  5. Abliganto

    Abliganto Постоялец

    Регистр.:
    30 ноя 2009
    Сообщения:
    111
    Симпатии:
    46
    К примеру для выкачки файлов я уже давно использую wget и огромные списки URL (> 100 к файлов), а потом PHP парсит результат - очень отлично работает. С фтп нужен лишь один ответ: закачался файл (true) или нет (false) :) По этому рассматривать можно только консольный вариант а-ля wget.

    Жду ответов по теме :)
     
  6. admLoki

    admLoki генератор случайного PHP

    Регистр.:
    14 сен 2006
    Сообщения:
    481
    Симпатии:
    93
    Я вроде по русски написал — неинтерактивный фтп-клиент.
     
Статус темы:
Закрыта.