PHP Internal Server Error 500 при использовании ffmpeg для конвертации файлов - PullRequest
3 голосов
/ 12 января 2011

У меня есть PHP-скрипт, который вызывается с помощью задания cron на моем сервере для запуска загруженных конверсий видео.Он отлично работает для некоторых видео, но когда видео немного больше (например, 21 МБ), я получаю 500 Internal Server Error и никакого другого выхода.

Я думаю, что это возможно из-за тайм-аутов, поэтому я добавил set_time_limit(9000), а также ini_set('max_execution_time', 9000), чтобы предотвратить это, но это ничего не решает.

Я выполняю ffmpeg, используя:

$cmdOut = shell_exec ('ffmpeg -y -i [....] 2>&1'); // [....] is the rest of the command, it works fine with other videos, so i assume that it works ok.
echo print_r($cmdOut);

Однако нет выходных данных, и следующие строки не выполняются, поэтому после shell_exec сценарий прерывается.

Глядя на apache error_log, я вижу следующую строку:

[Wed Jan 12 00:12:46 2011] [error] [client xx.xxx.xxx.xxx] Premature end of script headers: index.php

Но других подсказок нет.Кто-нибудь может мне помочь?

Для целей тестирования я создал этот скрипт PHP:

<?php
set_time_limit(300);
sleep(120);
echo "SLEEP OUT";
?>

Этот скрипт вызывает «500 Internal Server Error», когда я вызываю его из моего веб-браузера,поэтому я предполагаю, что set_time_limit не работает.Если я поставлю sleep (30), он сработает и вернет текст SLEEP OUT.Поэтому вопрос заключается в том, как избежать ошибки тайм-аута для выполнения сценария PHP, выполнение которого занимает 5 или 10 минут ??

ПРИМЕЧАНИЕ. Сервер CentOS работает под управлением Apache и php в качестве модуля FastCGI.

Ответы [ 2 ]

2 голосов
/ 12 января 2011

Наконец я решил это сам.Я разработал обходной путь, чтобы обойти ограничение тайм-аута в php.Мое решение - выполнить скрипт php с помощью команды php-cli с запланированным заданием cron.Таким образом, у меня нет ограничения по времени при выполнении моего скрипта, и он прекрасно работает.

Спасибо всем, особенно Phoenix, за их время и идеи по этому вопросу.

1 голос
/ 12 января 2011

Вам действительно нужен консольный вывод для чего-либо?Однажды я столкнулся с подобной проблемой, даже несмотря на то, что я изменил сам основной php.ini, чтобы продлить ограничение времени выполнения, он все равно будет случайным образом падать при выполнении ffmpeg через exec.Завелся с необходимостью > /dev/null &, чтобы остановить его выполнение, затем он работал нормально, независимо от того, что на него было брошено.

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