Как изолировать скрипт аварийного сервера в PHP? - PullRequest
3 голосов
/ 08 октября 2010

О боже мой.Я никогда не думал, что мне нужно будет спросить вас об этом.Но, к сожалению, да, мне нужно!

У меня есть собственный скрипт, написанный на PHP, который использует ffmpeg-php.А ffmpeg-php это ублюдок.Для некоторых вводов это работает нормально, но для некоторых происходит сбой всего моего PHP, и сервер выдает Internal Server Error 500. Я несколько раз пытался обновить ffmpeg-php, сам ffmpeg и так далее, но когда для некоторого ввода это работает в версии0,5 на 0,6 не получится.И мне нужно быть уверенным, что остальная часть сценария будет обработана правильно.И теперь это не так, потому что, когда дело доходит до запуска toGDImage () на кадре фильма, у меня есть Внутренняя ошибка сервера 500 и никакой обратной связи почему ни из какого источника.

Так что для спокойствия моих пользователей я решил, что янужно изолировать эту часть скрипта, которая мешает ffmpeg-php.Мне нужен способ, чтобы убедиться, что если что-то пойдет не так в этой части, все остальное будет продолжаться.

Попытка catch не работает, потому что это не предупреждение и не фатальная ошибка, это ужасносервер-катастрофа.Каковы ваши предложения?

Я думаю о том, чтобы поместить этот скрипт в другой файл с именем ffmpeg-php-process.php, вызвать его через HTTP и прочитать результат, если это Internal Server Error 500 - я буду знать, чтоэто не было хорошо.

Или есть ли другие, более изящные способы изолировать сценарии бедствия в PHP?

Ps.Не пишите, что мне нужно диагностировать или отладить или найти источник ошибки.Я не чертов новичок, и я не ffmpeg dev, чтобы возиться с его кодом, мне нужно, чтобы мои пользователи были в безопасности, и это все, что меня сейчас волнует.

Ответы [ 3 ]

2 голосов
/ 08 октября 2010

Вы можете создать новый процесс, содержащий ваш скрипт php-ffmpeg.Для этого есть несколько функций: proc_open() как экземпляр.

В документации есть неплохой пример: http://php.net/proc_open

2 голосов
/ 08 октября 2010

Если вы получаете ошибку 500, это потому, что какое-то исключение генерируется на уровне ниже, чем в самом PHP. Если ваш код не превращается в какой-то бесконечный цикл или не достигает предела рекурсии (и особенно потому, что он работал с версией 0.5), есть хороший шанс, что ffmpeg или ffmpeg-php вылетит и получит экземпляр PHP, который запустил его с это.

Честно говоря, вы ничего не можете сделать из PHP.

Лучше всего было бы, поскольку у вас уже есть доступ к серверу, написать соответствующий скрипт на языке Python. Существует множество плагинов ffmpeg для Python, так что вам совсем не придется настраивать это. Вызовите ваш скрипт Python из PHP и извлеките вывод из файла. Что это будет делать, это изолировать PHP от сбоя вашего скрипта. Это также избавит вас от ffmpeg-php (который, по крайней мере для меня, кажется нечестивой комбинацией).

Если вы не можете использовать PHP (что я не рекомендую), вы можете запустить другой PHP-скрипт, используя php-cli из вашего внешнего PHP-скрипта, и выполнять работу оттуда (как вы это делали бы с Python). Опять же, я настоятельно рекомендую вам избегать этого.

Надеюсь, это поможет!

1 голос
/ 08 октября 2010

У меня есть нечто похожее с извилистой, большой, громоздкой устаревшей системой php-mail, которую я поддерживаю. Когда стало очевидно, что система электронной почты становится ее собственным чудовищем, мы полностью отделили ее как собственный виртуальный сервер. Там нет разделения, как физическое разделение. И, эй, виртуальные серверы дешевы ....

С другой стороны, вы можете запускать, перезапускать и вообще уничтожать отдельный сервер, практически не влияя на остальную часть вашего кода. Это может также улучшить последствия для резервного копирования (изолировать носители и логику). С тех пор, как мы пошли по этому пути, мы никогда не отключали основной сервер приложений.

Однако, это создает проблему с подключением, так как теперь вместо того, чтобы работать локально, ваш сервер будет общаться с другим, отделенным хотя бы небольшим количеством провода в том же шкафу (надеюсь)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...