限定页面执行时间,请求超时抛出异常或提示
方案一:
1.修改php.ini配置文件 max_execution_time = 30 ,限定页面请求时间,默认30秒;
方案二:
1.set_time_limit— 设置脚本最大执行时间,函数没有返回值
设置允许脚本运行的时间,单位为秒。如果超过了此设置,脚本返回一个致命的错误。默认值为30秒,或者是在php.ini的max_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' => [], ];