我有一个奇怪的要求,要检查每个请求和响应之间的时差
我有一个PHP文件(request.php)服务于图像作为它的响应,所以我必须检查GET request.php和GET图像请求之间的时差。对于每一个请求。
例如:
时间request.php让我们说12:40 AM
它将响应图像,当图像插入网页时,我得到图像请求说12.42 AM。
所以我的要求是每次点击我的服务器时计算request.php和image之间的时差。
我建议阅读Apache访问日志,但是客户希望我记下每个请求的请求时间,并将一些请求存储在哪里,并计算每天请求之间的平均值。
我的想法是阅读Apache-log并且有一种方法可以编写一个php脚本,它可以用于每个传入的请求并检查它的时间,可能是一个自定义的访问日志文件。
任何帮助!!
答案 0 :(得分:4)
您应该使用处理程序来挂钩每个请求。 这可以很容易地完成,但是你也应该从你的php中提供文件。
以下代码段假设如下:
.htaccess
个文件)mod_rewrite
docroot
在服务器的docroot
文件夹中,创建以下文件:
.htaccess
handler.php
<强>的.htaccess 强>
在您喜欢的文本编辑器中打开.htaccess
文件,输入以下内容,然后保存:
RewriteEngine On
RewriteCond %{REQUEST_URI} !handler.php$
RewriteRule (.*) handler.php
<强> handler.php 强>
在.handler.php
文件中键入以下内容,然后保存:
<?
$over = $_SERVER['SERVER_PROTOCOL'];
$path = explode('?',$_SERVER['REQUEST_URI']);
$path = (($path == '/') ? '/home.html');
$extn = array_shift((explode('.',$path)));
$list = # array
[
'html' => 'text/html',
'css' => 'text/css',
'png' => 'image/png',
'js' => 'application/javascript',
];
$type = (isset($mime[$extn]) ? $mime[$extn] : 'text/plain');
if (file_exists(".${path}"))
{
if (is_dir(".${path}") || ($path == '/.htaccess'))
{
header("${over} 403 Forbidden");
echo "path: `$path` is forbidden";
exit;
}
header("${over} 200 OK");
header("Content-Type: ${type}");
header("Content-Length: ".filesize($path));
readfile($path);
exit;
}
header("${over} 404 Not Found");
echo "path: `$path` is undefined";
exit;
?>
对于每个请求,请获取当前microtime
。
然后,提供文件,(获取文件的mime类型,编写适当的标题:“Content-type”,简单地说:readfile('path/to/file.mp3');
*其中'path / to / file.mp3'显然是:
$_SERVER['REQUEST_URI']
或某些重新路由 - 但是你想要它。
然后,再次获取microtime,现在,从后者中减去前一个microtime,并且您有足够的时间来提供该文件。
因此,完成后,现在您可以在数据库中记录每个请求,或者在每个请求中记录相应的字段名称。
我不确定需要多少细节,请相应评论。
答案 1 :(得分:1)
2:从你的问题来看,我认为要求是实际获得图像最终显示的时间&#34;在访问者的浏览器上?
如果是这种情况,那么,这可能会非常快速,取决于信息的准确程度,以及如果您不介意通过XMLHTTpRequest获取所述图像。如果是这种情况,你可以将整个服务器端的东西作为先决条件,通过设置自定义响应头,即:
header('x-imageID', $mysql_insert_id());
然后是readfile(&#39; blah.jpg&#39;);
在客户端,使用XMLHTTpRequest,在onload
事件中为服务器设置另一个请求,其中image-id为xhr.getResponseHeader('x-imageID')
,当前时间为毫秒:{{1 }}
显然,您需要设置一些信息来区分请求,以便服务器只记录图像请求,并使用&#34;更新时间&#34;更新记录。请求。
希望它有所帮助;)