【问题标题】:Set time out for functions in PHP在 PHP 中为函数设置超时
【发布时间】:2015-12-05 19:57:50
【问题描述】:

我在php 中有一个函数,我想为其工作设置一个超时时间。 例如,如果超过 1 秒,则返回 false。

function myFucntion()
{
    sleep(2);
    return true;
}

echo myFunction();

我希望这些代码在一秒钟后返回 false(例如)!

对不起,我的英语不好!

【问题讨论】:

  • 很高兴知道您在这里想到了什么样的功能。它会做什么,可能需要很长时间?该过程将如何应对被打断?如果代码在此期间写入数据库,您是否希望超时也回滚任何更新?在做这种事情时有很多考虑因素需要考虑清楚,而该功能正在做的工作类型将极大地影响您如何实现这一目标。
  • 当我遇到这个问题时,我使用stream_socket_clientfread 函数,如果服务器超时,我的代码卡住了,首先我使用线程然后我找到stream_set_timeout 但是想到这个问题,如果再次发生这种情况,我一般如何处理它。如果达到超时时间,它会抛出一个异常,我可以处理它,但它只是立即杀死代码。

标签: php


【解决方案1】:

time() 返回当前时间,以秒为单位。

在脚本集的开头:

$start_time = time();

以后你可以得到

$current_time = time();

然后得到差异:

$diff = $current_time - $start_time;

您将获得以秒为单位的时间量。你可以基于你的逻辑:

if($diff > 5) { // if more than 5 seconds
    // do something, return false etc.
}

更多详情:http://php.net/manual/en/function.time.php

【讨论】:

  • 这只会在脚本中的特定点检查if ($diff > 5)。如果在需要 30 秒执行的块(例如循环或 sql 查询)之后完成该检查,则 5 秒后不会返回 false。
  • @Tristan 好点,我的解决方案既快速又简单,尽管并不完美。随意发布您的解决方案,我会投票赞成。
  • 同意。我只能看到它通过线程docs.php.net/Thread 实现(也许)
  • 我现在用线程写,但是线程需要在php中添加一些扩展。我寻找一种可以无限制地在任何地方使用它的方法。如果不可能... :|
【解决方案2】:

如果你想退货,你必须自己这样做:

 function myFunction()
    {
    $runtime=1000;
        $endtime=time()+$runtime;
    $exit=false;
        $functiondone=false;

        while (!$functiondone&& !$exit)
        {
            //your stuff e.g: $functiondone=true;

            //checking timer
            $exit=time() >= $endtime;

        }

        return $functiondone; //functiondone this var u can change in function
    }

【讨论】:

  • 来自关于 set_time_limit() 的手册:“设置脚本允许运行的秒数。如果达到此值,脚本将返回致命错误”。 php.net/manual/en/function.set-time-limit.php
  • 在这种情况下,您需要自己编写代码。我会更新答案
  • 也许你在检查时间之前卡住了。我只想停止该功能并及时执行其余代码。
  • 是的,你说得对,这是我的快速解决方案。但是你可以使用 register_shutdown_function
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-23
  • 1970-01-01
  • 1970-01-01
  • 2017-11-03
  • 2011-12-06
  • 2023-03-23
  • 2018-10-06
相关资源
最近更新 更多