【问题标题】:heroku php increase max_execution_timeheroku php增加max_execution_time
【发布时间】:2021-04-02 05:11:37
【问题描述】:

我在 Heroku 上托管了一个电报机器人。

它需要从网站上抓取一些内容 解析它并向用户发送消息

$params['text'] = getRemoteContent("https://example.com/someData");

$t->send('sendMessage', $params);

但它会在 30 秒后退出

2020-12-23T15:04:54.995957+00:00 app[web.1]: [23-Dec-2020 15:04:54] WARNING: [pool www] child 295, script '/app/index.php' (request: "GET /index.php?q=data&chat_id=000672000") execution timed out (30.626797 sec), terminating

我尝试了 .user.ini,但结果没有变化,30 秒后它仍然退出

max_execution_time = 400

【问题讨论】:

  • 与其增加执行时间,让我们关注一下,如何快速处理内容。
  • 它的远程网站有时加载缓慢,无法控制
  • 这能回答你的问题吗? set_time_limit not working on heroku

标签: php heroku timeout


【解决方案1】:
  • Heroku 上的 Web 请求有 30 秒的限制。来自他们的Request timeout 文章:

Heroku 处理的 Web 请求通过多个 Heroku 路由器定向到您的测功机。这些请求旨在由您的应用程序快速处理。最佳实践是让您的 Web 应用程序的响应时间低于 500 毫秒 [...] 有时 Web 请求可能会挂起或需要过多的时间来处理您的应用程序。发生这种情况时,如果完成时间超过 30 秒,路由器将终止请求。

现在详细介绍并提到一个额外的 55 秒窗口:HTTP timeouts(在他们关于 Limits 的文章中。)

与一次性测功机的连接将在闲置一小时后关闭

【讨论】:

    【解决方案2】:

    更改 php.ini 后尝试重置您的 apache。

    换个方式,写

    <?
    set_time_limit(50);
    //your code
    

    这是一种不好的做法,最好编写可以缩短加载时间的代码,例如让进程并行工作。

    更新: 我看到你在“heroku”上运行。 从他们的文档中看,如果您必须超过 30 秒的请求超时,您将需要使用后台作业:

    https://devcenter.heroku.com/articles/request-timeout

    【讨论】:

    • 试过了,没用。请注意,它在 Heroku 环境中
    猜你喜欢
    • 2012-02-03
    • 2014-10-29
    • 1970-01-01
    • 2014-10-11
    • 2012-06-30
    • 2015-04-06
    • 2012-04-19
    • 1970-01-01
    • 2015-07-03
    相关资源
    最近更新 更多