限定页面执行时间,请求超时抛出异常或提示

Posted 头大的冯冯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了限定页面执行时间,请求超时抛出异常或提示相关的知识,希望对你有一定的参考价值。

方案一:

  1.修改php.ini配置文件 max_execution_time = 30 ,限定页面请求时间,默认30秒;

方案二:

  1.set_time_limit设置脚本最大执行时间,函数没有返回值

  设置允许脚本运行的时间,单位为秒。如果超过了此设置,脚本返回一个致命的错误。默认值为30秒,或者是在php.inimax_execution_time被定义的值,如果此值存在。

  当此函数被调用时,set_time_limit()会从零开始重新启动超时计数器。换句话说,如果超时默认是30秒,在脚本运行了了25秒时调用set_time_limit(20),那么,脚本在超时之前可运行总时间为45秒。

 

  当你的页面有大量数据时,建议使用set_time_limit()来控制运行时间,配置该页最久执行时间。

  设定一个程式所允许执行的秒数,如果到达限制的时间,程式将会传回错误,时间是秒单位。

  php.ini:它预设的限制时间是30秒,max_execution_time的值定义在结构档案中,如果将秒数设为0,表示无时间上的限制,修改后重新启动apache/nginx服务器

  eg: php代码:set_time_limit(800);

  这个函数指定了当前所在php脚本的最大执行时间为800秒,实际上最大执行时间=php.ini里的max_execution_time数值 - 当前脚本已经执行的时间 + 设定值

  假如php.ini里的max_execution_time=30,当前脚本已经执行5秒,则:

  最大执行时间=30-5+800=825秒

  注意:当php运行于安全模式时,此功能不能生效。除了关闭安全模式或改变php.ini中的时间限制,没有别的办法,当运行超过设定时间会返回一个致命错误

  

方案三:TP5框架配合set_time_limit()函数方案

  使用tp框架行为扩展配合set_time_limit()函数实现,该方法是在每个接口请求时,都先执行set_time_limit(),目前这种方法超时程序不会停止执行(windows下),但会返回一致命错误。

  1.行为定义,定义一个行为类命名为Be.php,注意命名空间,类文件路径要放对

<?php
namespace app\\index\\behavior;

class Be
{
    public function actionBegin(&$params)
    {
        $bool = set_time_limit(5);
        //$bool = ini_set ( \'set_time_limit\' , 5 );
    }

    public function appEnd(&$params)
    {

    }
}

 

  2.行为定义完成后,就需要绑定到某个标签位置才能生效,否则是不会执行的。可以在APP_PATH目录下面或者模块的目录下面定义tags.php文件来统一定义行为,定义如下:

<?php

// 应用行为扩展定义文件
return [
    // 应用初始化
    \'app_init\'     => [],
    // 应用开始
    \'app_begin\'    => [],
    // 模块初始化
    \'module_init\'  => [],
    // 操作开始执行
    \'action_begin\' => [
        \'app\\\\index\\\\behavior\\\\Be\',
    ],
    // 视图内容过滤
    \'view_filter\'  => [],
    // 日志写入
    \'log_write\'    => [],
    // 应用结束
    \'app_end\'      => [],
];

 

以上是关于限定页面执行时间,请求超时抛出异常或提示的主要内容,如果未能解决你的问题,请参考以下文章

HttpClient的PostAsync方法在2-3次超时请求后抛出Aggregate异常

使用实体框架迁移时 SQL Server 连接抛出异常 - 添加代码片段

java项目页面为啥会超时?

System.Web.HttpException:请求超时

gRPC请求超时和异常处理

gRPC请求超时和异常处理