Как можно организовать параллельное скачивание изображений на php?
Задача такая:
В базу данных добавляются урлы с аватарами пользователей, необходимо по этим урлам скачать фотки на сервер. Но когда урлов, например больше 100, скрипт ломается и не может выкачать фотки. Как можно распараллелить такой процесс?
1. Почему скрипт ломается? Не успевает выкачивать за выделенное php-процессу время? Установите таймаут руками.
2. Запускайте из консоли. Если скрипт ломается по причине 1, распараллеливание не поможет.
Постройте очередь из задач на скачивание. Запускайте крон и берите по несколько задач скачивания для 1 процесса. И, надеюсь, вы используете cURL с ограничением timeout для данных задач.
100 скачиваний фигня ради которой думать о мультикурле нет смысла. Поэтому можно спокойно качать в обычном однопоточном режиме. И искать ошибку в скрипте (или механизме его запуска). Правильный вариант - запуск в минутных cron-ах.
Более подробно как реализовано на данный момент. каждые 3 минуты выполняется скрипт, который достает урлы одного пользователя (при тестрирование у одного пользователя их оказалось даже 3000) и циклом с помощью функции copy скачивает фотки. Максимальное время выполнения скрипта установлено 300 секунд. Этого времени не достаточно для скачивания такого количества фоток, но и увеличивать его нельзя, так как нужно максимально уменьшить время ожидания для пользователя