在PHP里,限制代码的超时时间,使用的函数是:void set_time_limit ( int seconds)。
比如:set_time_limit(5);当执行时间超过5秒时,PHP不再继续执行,返回空白页。
有的时候我们需要在超时后做一些事情,比如记录日志等等。
这时,可以使用void register_shutdown_function ( callback function)函数,小括号内写函数名。超时后,执行你指定的callback函数。
但register_shutdown_function ( callback function) 只提供了函数名,不能提供参数。那怎么传参数呢?
可以将参数放到文件里,callback函数直接读取文件里的内容。
简单说明下,开始上代码。使用PHP的Yii框架,文件名是:SiteController.php
class SiteController extends CController {
/**
* 初始化
*/
public function init() {
/**
* 处理超时
* @param void
* @return void
*/
function logMessage() {
$filename = Yii::app()->params['sessPath'].Yii::app()->session->sessionID.'.sess';
$rs = array();
//第一步:读取缓存文件
if (file_exists($filename) == true):
$handle = fopen($filename, "r");
$rs = unserialize(fread($handle, filesize($filename)));
else:
header("Content-Type:text/html;charset=utf-8");
echo '读取缓存文件失败';
return;
endif;
//第二步:记录日志或其它操作
……
}
}
/**
* 首页
*/
public function actionIndex() {
//记录$_SERVER到缓存文件
$filename = Yii::app()->params['sessPath'].Yii::app()->session->sessionID.'.sess';
file_put_contents($filename, serialize($_SERVER));
unset($filename);
//设置超时时间
register_shutdown_function('logMessage');
error_reporting(0);
set_time_limit(5);
//调用后台接口
……
}
}