使用ffmpeg转换文件时PHP内部服务器错误500

时间:2011-01-11 23:53:49

标签: php ffmpeg video-encoding

我有一个PHP脚本,它在我的服务器中使用cron作业调用,以运行上传的视频转换。它适用于某些视频,但当视频稍大(例如21MB)时,我得到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内部服务器错误”,因此我认为set_time_limit不起作用。如果我把睡眠(30)它工作,它返回文本SLEEP OUT。所以问题是,如何避免超时错误来执行需要5或10分钟才能完成的PHP脚本?

注意:服务器是运行apache的CentOS和作为FastCGI模块的php。

2 个答案:

答案 0 :(得分:2)

最后我自己解决了这个问题。我已经开发出一种解决方法来绕过php中的超时限制。我的解决方案是使用带有预定cron作业的php-cli命令执行php脚本。这样,我在执行脚本时没有时间限制,而且效果很好。

感谢所有人,特别是凤凰城对这个问题的时间和想法。

答案 1 :(得分:1)

你真的需要控制台输出吗?我遇到过类似的问题一次,即使我修改了主要的php.ini本身来延长执行时间限制,但是当通过exec执行ffmpeg时它仍会随机掉线。不得不让它> /dev/null &来阻止它执行掉落,然后无论扔到什么地方都能正常工作。