打赏

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

方案一:

  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'      => [],
];

 

posted on 2018-05-19 15:32  头大的冯冯  阅读(793)  评论(0编辑  收藏  举报

导航