使用ffmpeg转换文件时PHP Internal Server Error 500

标签 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 不起作用。如果我输入 sleep(30),它会工作并返回文本 SLEEP OUT。所以问题是,如何避免超时错误来执行需要 5 或 10 分钟才能完成的 PHP 脚本?

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

最佳答案

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

感谢所有人,特别是 Phoenix 就此问题花费的时间和想法。

关于使用ffmpeg转换文件时PHP Internal Server Error 500,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4664011/

相关文章:

php - Jquery CSS 淡入淡出和淡出不同的 css 文件

c++ - Opencv 3.0 与哪个版本的 FFMPEG?

FFMPEG。在文件名中使用当前日期时间。 strftime 参数似乎不起作用

php - 如何将 FLV 视频剪切成几个小块?

regex - 使用 FFMpeg 确定视频类型,然后转换?

php - WordPress 自定义操作/过滤器执行两次

php - 排除 åäö 到 ¤¶ 的故障

php - 标准时间的日期时间格式方法(laravel 5.3)

video - FFMpeg 默认比特率值

ffmpeg - c中的h264无损设置