PHP忽略了我的max_execution_time

11

我有一个任务是用ffmpeg转换视频的脚本。我使用codeigniter 2.0.3在libraries中编写脚本,并使用shell_exec()运行ffmpeg。

我的php脚本中有3个任务:

  1. 上传文件
  2. 将视频转换为.flv格式
  3. 生成缩略图
  4. 保存到数据库

当我上传文件时,我的php脚本开始转换上传的视频。但是当转换需要超过5分钟时,它就无法继续生成缩略图了。并且会显示如下错误:

PHP致命错误: C:\AppServ\www\mis\application\libraries\my_video_utility.php的第102行超过了300秒的最大执行时间,来自: http://localhost/mis/test/

我已经将php.ini中的max_execution_time、max_input_time等参数设置为3600,并在我的php脚本中添加了set_time_limit()和set_ini()函数。但是仍然会出现错误。

但是,如果上传的视频较短,则可以成功转换。


你是否检查了 phpinfo(); 来确保所有参数都已经被实际修改了? - zerkms
你在编辑php.ini文件后是否重启了PHP? - user557846
这可能是托管公司阻止你执行此操作吗?有一种安全设置禁止你更改最大执行时间,一些主机喜欢使用它。我会找到该设置的名称。 - Jess
2
你愿意允许请求运行1小时吗?为什么不在后台进行这个操作呢? - miki
@zerkms 是的..我绝对改变了这个值。而且我已经检查了phpinfo(),它显示为3600。 - Muhammad Resna Rizki Pratama
显示剩余4条评论
3个回答

20

好的,我自己解决了。我已经联系了我的老师。这是因为CodeIgniter的文档中没有包含这个东西。

在system/core/CodeIgniter.php的第103行。

if (function_exists("set_time_limit") == TRUE AND @ini_get("safe_mode") == 0)
{
    @set_time_limit(300);
}

我尝试改变这个值并且它起作用了。


1
这是提交 https://github.com/bcit-ci/CodeIgniter/commit/f566af5ffb8f2e8d49bd0b206c6ee29c8bc35a78 - macki

2

解决方案是更改 CodeIgniter.php 中的 set_time_limit() 函数,虽然这样做可行,但我认为更改框架核心文件不是一个好主意。

我找到了另一种方法,您可以在需要的地方调用 set_time_limit(),它将覆盖 CodeIgniter.php 中的时间限制设置。


0

Codeigniter 2中使用set_time_limit函数运行时间为300。升级到Codeigniter 3后,有一件事情开始失败了。在查看了这篇文章之后,我意识到set_time_limit调用在3中被删除了,因此您可能需要将接受的答案中的代码添加到您特定的问题代码中。我不建议将其添加回Codeigniter.php中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接