加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 我可以让一段代码超时吗?

发布时间:2020-12-13 16:13:02 所属栏目:PHP教程 来源:网络整理
导读:我正在使用一个与服务器建立远程连接的类.我遇到的一个问题是,如果连接没有得到响应,它会等到它发生. 这个类没有内置的超时,如果我可以避免它,我不想修改它. 有什么方法可以用这样的东西包装一段代码吗? try(timeout seconds){}catch(){ //exception handle
我正在使用一个与服务器建立远程连接的类.我遇到的一个问题是,如果连接没有得到响应,它会等到它发生.

这个类没有内置的超时,如果我可以避免它,我不想修改它.

有什么方法可以用这样的东西包装一段代码吗?

try(timeout seconds){
}catch(){
    //exception handle
}timeout(){
    // timeout handline
}

编辑:我使用远程连接作为一个问题.我还有其他我需要解决的问题,比如用exec或其他类似的东西进行系统调用.

解决方法

不仅仅是代码的一部分.

但是,根据要求,有一些替代解决方案,无需修改原始代码:

参数或者set_time_limit

如果运行时间太长,set_time_limit()将中止整个脚本.你仍然可以设置shutdown function.

pcntl_alarm

pcntl_alarm()将在给定的时间后向您发送一个信号,这可能会中止该类当时正在进行的阻塞系统调用,这可能允许您在类提供此类方法时让该类中止其操作.但是,这可能不适用于Web服务器环境.

默认超时

如果类正在使用流函数,则可以设置默认超时:

ini_set('default_socket_timeout',5);
stream_context_set_default(array(
    'http' => array(
        'timeout' => 5,),));

在单独的过程中执行

您可以使用pcntl_fork()进行分叉,但这不适用于服务器环境.

您还可以使用proc_openpopen在单独的进程中执行PHP脚本,如果运行时间过长则将其终止. (生成进程后,使用stream_select对进程’stdout流进行空闲等待.)

或者设置服务器来处理这些任务.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读