журнал времени загрузки файла - PullRequest
2 голосов
/ 29 октября 2009

Есть ли способ записать (записать) время, необходимое для загрузки файла с веб-сервера через браузер? Файл записан на жестком диске, а среда - LAMP.

Спасибо.

Ответы [ 3 ]

1 голос
/ 02 ноября 2009

Конечно, есть. Вам придется либо использовать 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'] является только примером и должен быть правильно экранирован, чтобы люди не могли взломать ваш сервер.

EDIT:
Измененный, чтобы проверить, действительно ли это работало - Марк заставил меня подвергнуть сомнению это! ;) Необходима небольшая настройка (особенно на microtime), но да, она работает !

0 голосов
/ 31 октября 2009

Я не думаю, что PHP будет иметь доступ к такой информации. Я не уверен, будет ли Apache сообщать вам об этом или будет ли приведенный ниже метод также рассчитывать время, пока файл не будет выгружен в буфер передачи, но я бы посоветовал вам попробовать это:

Определите пользовательский журнал, в который вы включаете директиву «% D», это дает вам «Время, затраченное на обработку запроса, в микросекундах».

0 голосов
/ 29 октября 2009

Одним из способов будет прокси загрузки через скрипт (это может быть легко достигнуто с помощью mod_rewrite). Это означает, что вам нужно выполнить всю работу, например, сопоставить расширения с соответствующими им mime-типами (для заголовка Content-Type). Попробуйте загрузить файл из браузера и взгляните на заголовки, которые он отправляет; Вы должны подражать тем. Вы можете использовать, например. web-sniffer.net для проверки заголовков.

...