2013-07-25 15 views
3

问题很简单,我想检查一个数据库为网站访问者提供定制内容,但是如果这个功能需要800ms以上的时间执行,那么故障转移并提供一个通用页面。 (服务器响应的目标时间为1000毫秒)。php set_time_limit小于一秒

我见过set_time_limit函数,但是这需要一个秒数的整数作为参数。

我的问题:是否有类似的东西可以用于小于1秒的值?

我在寻找类似:

void set_time_limit_ms (int $milliseconds) 

set_time_limit_ms (800) 
+0

所以问题是一个长时间运行的数据库查询?请参阅http://stackoverflow.com/questions/4794747/mysql-can-i-limit-the-maximum-time-allowed-for-a-query-to-run – bitWorking

+0

可能是的,但我也会期待在PHP中进行一些数学比较,这也会占用一些处理时间,或者可能用R等另一种语言调用脚本。基本上,我想在函数开始时启动时钟,并在800毫秒内杀死它,并且可以自由地将任何我想要的功能(我会做很多实验来优化开始的速度),知道它会杀死查询并以800毫秒提供一个通用页面。感谢您的关注。 –

回答

3

不存在。你可以用滴答功能模拟它:

declare(ticks=1); // or more if 1 takes too much time 
$start = microtime(1); 
register_tick_function(function() use ($start) { 
    (microtime(1) - $start < 0.8) or die(); 
}); 
+0

但这不是一个长时间运行的查询的解决方案!? – bitWorking

+0

也不能用set_time_limit()中断长时间运行的查询。如果在长时间运行的查询期间超出了时间限制,程序将在执行查询后中止。对于长时间运行的查询,您无法从PHP端执行任何操作。 (如果我没有错,也从MySQL方面) – bwoebi

+0

嗨bwoebi,感谢您的意见。我会编码并在周末进行测试。我会回来的结果。 –

0

是的,我经常使用microtime。看到

http://php.net/manual/en/function.microtime.php

<?php 
$time_start = microtime(true); 

// Sleep for a while 
usleep(100); 

$time_end = microtime(true); 
$time = $time_end - $time_start; 

echo "Did nothing in $time seconds\n"; 
?> 
+1

这并没有真正回答这个问题:'我怎样才能在几毫秒后停止程序的执行?'而不是:'我的程序需要几毫秒?' – bwoebi

1

您将无法使用该功能,以防止运行的时间比你预期的查询。这仅测量实际的脚本执行时间。这里有一点来自手册。

的set_time_limit()函数的功能和配置指令 的max_execution_time只影响脚本本身 的执行时间。在确定脚本运行的最长时间 时,不包括脚本执行 以外的任何活动时间,例如使用system()系统调用,流操作, 数据库查询等。在测量时间是真实的Windows 上,这不是真的。

+0

嗨DevZer0,虽然这没有专门回答这个问题,它是一个我没有想到并且需要考虑的真正受欢迎的指针。非常感谢!! –