使用PHP5 / Apache2的Http请求持续时间

时间:2013-02-04 21:57:25

标签: apache http

有没有办法从HTTP服务器获取有关HTTP请求持续时间的可靠信息?

感兴趣的场景:

使用POST方法调度带有数据有效负载的AJAX请求,目标是PHP脚本:

//dispatch ajax request
$.ajax({
  type: "POST",
  url: "timing.php",
  data: {
         "payload":"some long string or something",
         "currentTime": +new Date() //miliseconds on client
        },
  success: function(response) { console.log(response) },
  error: function() { console.log('something went banana...') },
  dataType: "text"
});

PHP脚本“timing.php”可能会说:

<?php
//in the meanwhile, on a quiet server...
$currentTime = microtime(true); //microseconds on server
//send headers as necessary, and then, the payload
echo $currentTime * 1000 - $_POST["currentTime"];
?>

我想知道的是从请求到达http服务器到服务器调用PHP脚本之间的时间。处理(加载)POST请求的输入参数需要多长时间。不是从Javascript currentTime到PHP $ currentTime所花费的时间,而是一个Apache用来从AJAX请求加载“payload”(和“currentTime”)。 应该在服务器端收集时间。

下落:

  • 客户端和服务器位于同一时区(同样,客户端没有做任何令人兴奋的时间设置),
  • 服务器具有PHP5 / Apache2,具有默认配置和模块,
  • 所需时间分辨率为毫秒

1 个答案:

答案 0 :(得分:0)

事实证明,最好用PHP环境获得一些可靠的信息是$ _SERVER ['REQUEST_TIME_FLOAT']变量,自PHP 5.4.0起可用。这将忽略启动实际模块(HTTP服务器)所需的一些时间,但应该相当准确。所需的时间是:

select t.* from 
tbl t 
left join tbl tp on t.id-1=tp.id and t.name=tp.name
left join tbl tn on t.id+1=tn.id and t.name=tn.name
where t.utilization_rate < 50 and 
( 
  ISNULL(tp.utilization_rate,0) < 50 or ISNULL(tn.utilization_rate,0) < 50
)

或者,如果将%D添加到mod_log_config模块的日志条目中,Apache2也可以这样做:

$time_microseconds = microtime(true) - $_SERVER['REQUEST_TIME_FLOAT'];.