文件下载时间日志

时间:2009-10-29 11:30:35

标签: php apache http

有没有办法记录(记录)通过浏览器从Web服务器下载文件所需的时间?该文件写在HDD上,环境为LAMP。

感谢。

3 个答案:

答案 0 :(得分:1)

当然有。您将不得不使用mod_rewrite让Apache知道该文件将由PHP提供(如果是这种情况,请询问更多说明)或者只是使用PHP脚本来获取这样的文件:

http://youserver.com/download.php?filename=mypicture.jpeg

然后你就可以download.php这样:

<?php
// gets the starting time
$time_start = microtime(true);

// WATCHOUT! THIS IS NOT SECURE! EXAMPLE ONLY.
#$filename = $_GET['filename'];

// gets the intro.mp3 file and outputs it to the user
$filename = "intro.mp3";
header('Content-type: audio/mpeg');
header('Content-Length: '.filesize($filename));
header('Content-Disposition: attachment; filename="intro.mp3"');
readfile($filename);

// gets the end time and duration
$time_end = microtime(true);

// write time to hdd, database, whatever
// ...
error_log("Processing time: ". sprintf("%.4f", ($time_end-$time_start))." seconds");
?>

请注意$filename = $_GET['filename']仅为示例,应正确转义,以便人们无法入侵您的服务器。

修改
改变以检查它是否真的有效 - 马克让我提出质疑! ;)需要小的调整(特别是在microtime上),但是的,它确实有用

答案 1 :(得分:0)

一种方法是通过脚本代理下载(可以使用mod_rewrite轻松实现)。这意味着您需要完成所有工作,例如将扩展映射到相应的mime类型(对于Content-Type标头)。尝试从浏览器下载文件,然后查看它发送的标题;你需要模仿那些。你可以使用例如。 web-sniffer.net检查标题。

答案 2 :(得分:0)

我认为PHP无法访问此类信息。我不确定Apache是​​否会告诉你,或者下面的方法是否也会在文件被转储到发送缓冲区之前的时间,但我建议你试试这个:

定义一个自定义日志,其中包含“%D”指令,这将为您提供“以微秒为单位提供请求所需的时间。”