【问题标题】:PHP - Divide et Impera to avoid Fatal Error: Maxim execution time exceededPHP - Divide et Impera 以避免致命错误:超出了 Maxim 执行时间
【发布时间】:2015-08-25 17:46:49
【问题描述】:

大家!

我正在构建一个“搜索者”以从 7 个网站获取一些价格。我正在使用 cUrl 来获取这个价格并且我正在处理这个问题:致命错误:超过最大执行。我已经阅读并看到了一些解决方案,但我想知道我是否可以将过程划分得更多。所以这是我的应用程序:

客户进入我的网站,搜索一些商品代码(最差的情况是 5 个不同代码之一)并发送价格请求。所以我向我的 MainController 发布了一个最多 5 个代码的数组,它将数组分布在每个控制器上,如下所示:

$codesArray -> MainController -> foreach(ControllersList as Controller){Controller->getPrices($codesArray)}

我假设时间执行分布错误,或者不是我想要的,因为我已经用 3 个代码和 “致命错误:最大执行时间:30 秒”对其进行了测试 出现在第 33 秒的第五个控制器上。我认为不可能在 3 秒内搜索 4 次 3 项并超过第五次,因此这意味着服务器正在计算 MainController 进程,而不是每个进程本身。我的问题是如何正确划分流程以获得每个控制器的时间分布?

我希望我能理解自己,抱歉英语不好,解释也不好。

注意:我用一组 7 个代码测试了每个控制器,但我从未遇到过这个致命错误,这就是我想划分进程的原因,但我不确定如何..

注意二:发送一个代码一次将导致 n*7 次 curl 执行,因为使用数组,该过程仅重复搜索功能,而不是整个连接到网站 -> 检查登录 ->登录* -> 搜索

【问题讨论】:

    标签: php time resources max


    【解决方案1】:

    定时器是与请求相关的一个整体,不会拆分在不同的控制器调用上。整个执行时间不能超过30秒(可以在php.ini增加时间限制。 而且,它们不是多个进程:PHP 是单线程的,因此您不能生成另一个线程并运行它。您可以尝试使用curl_multi_init() 并行进行调用,然后进行处理(我假设调用花费的时间比实际处理时间长)。

    【讨论】:

    • 是的,错误在 curl_exec($ch);线。我会试试这个,谢谢你的解释!我会试试看结果。另一个问题,如果我将按执行时间拆分控制器,例如 MoreTimeExecution 上的 3 和 LessTImeExecution 上的 3 并使用 ajax 调用每个将导致每个类别需要 30 秒,因为 ajax 正在发出 2 个请求?
    猜你喜欢
    • 2020-01-16
    • 2013-03-17
    • 2016-04-10
    • 1970-01-01
    • 2020-03-27
    • 1970-01-01
    • 1970-01-01
    • 2020-01-17
    • 2023-01-31
    相关资源
    最近更新 更多