Есть метод которы подключается к удаленному ftp Где находится 1000 файлов. Он отдает запрос на загрузку и поочереди загружает их. Но время выполнения скрипта равно примерно часу и серсер после лимита времени убивает выполнение скрипта. Вопрос, можно ли как то загрузить непрерывно изоброжения? Как это правильно делается , подскажите пожалуйста
Убрать ограничение времени можно функцией set_time_limit
Если скрипт запускается из браузера, не лишено смысла также игнорировать потерю соединения с клиентом: ignore_user_abort
ignore_user_abort(true);
set_time_limit(0);
Возможно, мое решение вам покажется немного сложным, но я постараюсь описать вам свое видение решения проблемы. Если задача выполняется постоянно и планируется расширение, возможно Вам подойдет.
К сожалению, от скрипта в цикле и постоянного его выполнения это Вас не избавит, но поднимет производительность и надежность архитектурного решения по скачиванию большого количества файлов.
Пусть у вас есть сервер очередей (например, RabbitMQ), и есть 3 скрипта:
Вы создаете очередь, называете ее files_download, на эту очередь вешаете консьюмера (скрипт, выполняющий задания из очереди и постоянно ее проверяющий). Раз в n-времени, запускаете свой скрипт по cron, который будет получать список файлов c сервера (ftp_nlist) и формировать его на основе какого-то алгоритма (что скачивать, что нет), далее, отправляете n-заданий (n - количество файлов) в очередь files_download, и качаете их с помощью скрипта который уже следит за очередью по одному.
Задания в очередь ставятся чаще всего со всей нужной информацией на основе JSON, предположим задание на скачивание будет выглядеть примерно вот так:
{"file": "ftp://my.server.com/file1.pdf"}
Можно добавлять дополнительные параметры, если они требуются скрипту.
Далее, по необходимости, после скачивания файла ставится задание на его обработку в другую очередь (files_processing) и выполняются какие-то другие сложные действия по конвертации и т.д.
Плюс данного решения в том, что вы никогда не потеряете файлы которые нужно скачать, можете повесить на очередь хоть 50 консьюмеров и качать в 50 потоков с разных серверов (все ограничено только клиентской и серверной пропускной способностью и количеством возможных коннектов) не поднимая многопоточность на уровне PHP, все будет контролировать очередь сообщений обеспечивая надежное выполнение заданий.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Здравствуйте, странно то если делаю выводи с ограничением по id тогда выводит, а с email почему то нетВот код:
Как с MySQL в php вывести дату если она имеет вот такой вид 14878812143994 ?