Как «развить» процесс преобразования видео в фон, в php?

У меня есть сценарий загрузки пакетной загрузки, который загружает видео файлы в каталог. Просто. После завершения загрузки он создает запись mysql для этого файла и переходит к следующему файлу в очереди.

Перед тем, как это сделать, я хочу, чтобы он вызывал фоновый процесс, который преобразует загруженный avi-файл avi в ipp-совместимый файл mp4, а также генерирует некоторые превью-превью. Как вы можете себе представить, требуется некоторое время … Я могу просто поместить код конверсии в загрузчик файлов … но он будет зависать для каждого файла за хорошие 10-20 минут, что является нео-(даже у вас есть функция только для администратора).

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

Будет ли что-то подобное выполнять эту работу, или мне действительно нужно использовать функции php fork?

exec("/usr/bin/php ./convert.php?id=123 > /dev/null 2>&1 &"); 

Страница руководства php для exec () говорит:

Если программа запускается с этой функцией, чтобы она продолжала работать в фоновом режиме, выход программы должен быть перенаправлен в файл или другой выходной поток. В противном случае PHP зависнет до завершения программы.

Итак, да, ваш вызов exec сделает трюк.

Лучший способ реализовать эту архитектуру – это рабочая очередь, с которой ваш PHP-интерфейс подает демона в файлы backend для преобразования. Отключите PHP от своей работы, и ваш пользовательский интерфейс всегда будет оставаться отзывчивым.

Я не писал PHP в течение длительного времени, но я понимаю, что любой процесс запускается под максимальным правилом таймаута и запускается под веб-сервером. Вы не хотите, чтобы это было так; вы, конечно, не хотите, чтобы веб-запрос мог запускать дополнительные процессы.

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

См. Также мой ответ на этот вопрос , что также актуально.

Он будет делать трюк, но это кажется неуправляемой идеей. Если вы только собираетесь начать и никогда не оглядываться назад, все может пойти не так быстро.

Как просто планировать сценарий, который выполняется каждые несколько минут, и опросы всех, что все еще находится в очереди. У вас есть доступ к cron?