Как запустить файл PHP, когда файлы существуют в каталоге - Сервер кодирования

Я делаю сервер кодирования и мне нужна небольшая помощь

У меня есть каталог с именем uploaded и файл php с именем videoConverter.php, и когда он запускается, у него есть цикл, который преобразует все видеофайлы в загруженном каталоге и FTP завершенный файл на потоковый сервер.

Нет проблем со сценарием, но проблема в том, что после завершения цикла он не будет преобразовывать никакие новые файлы, загруженные после завершения цикла. Мне нужно найти способ выполнить php-файл или скрипт, когда файлы загружаются в загруженный каталог.

Я думал об использовании задания cron и запуске файла php каждую секунду, но разве он не будет продолжать запускать скрипт, пока он уже запущен?

Кто-нибудь знает, как хорошо подойти к этому вопросу?


person Thomas Depole    schedule 23.08.2012    source источник


Ответы (2)


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

Мне лучше посмотреть на inotify локальные изменения в папках загрузки, а затем обработать новые файлы на ходу.

Сначала я использовал оболочку inotify в среде Node.js. :

  • всякий раз, когда появляется новый файл, вызывается encode(newFile);
  • когда процесс кодирования завершен, запускается обратный вызов pushToFTP(encodedFile) и начинается передача.

Бонус, файлы меньшего размера не должны ждать завершения всей работы благодаря асинхронной архитектуре js.

person moonwave99    schedule 23.08.2012
comment
Я не могу с вами больше согласиться, я не хочу придерживаться PHP, я использую его, потому что я знаю этот язык лучше всего ... на данный момент, и мне нужно это сделать, но я займусь этим. Я использую сервер Ubuntu с ffmpeg для кодирования. Итак, вы предлагаете использовать Node.js и inotify для выполнения этой задачи? - person Thomas Depole; 23.08.2012
comment
Да, после того, как вам удастся войти в систему, файл foo.bar добавлен в просматриваемую папку в консоли, остается лишь написать пару функций - плюс вы тем временем узнали полезную вещь. - person moonwave99; 23.08.2012
comment
Хорошо, отлично, спасибо за вашу помощь, если у меня есть какие-либо вопросы об узле, я задам новый вопрос, чтобы помочь пользователям, но опущу здесь URL-адреса. - person Thomas Depole; 23.08.2012
comment
Я не могу заставить его работать stackoverflow.com/questions/12114142/ - person Thomas Depole; 24.08.2012

Вы могли:

  1. Скрипт просыпается из cron, проверяет файл pid.
  2. Если он находит файл pid, он отключается
  3. Если он не находит файл pid, он записывает его в текущий каталог.
  4. Затем он приступает к обработке видеофайла.
  5. По завершении или при любом сбое, когда он должен выйти, он удаляет / разрывает связь с файлом pid.

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

Еще вы могли бы выполнить сценарий начальной загрузки, exec ('ps aux | grep VIDEO_SCRIPTNAME'); (или что-то в этом роде), и если вы видите, что сценарий уже запущен, не выполняйте сценарий преобразования видео. В этом примере у вас будет два файла: загрузочная программа, запускаемая cron и проверяющая, происходит ли в настоящее время преобразование видео, и второй файл, который действительно выполняет эту работу.

person mr-sk    schedule 23.08.2012