Есть ли способ зарегистрировать (записать) время, необходимое для загрузки файла с веб-сервера через браузер? Файл записан на HDD, а среда - LAMP.файл времени загрузки файла
Спасибо.
Есть ли способ зарегистрировать (записать) время, необходимое для загрузки файла с веб-сервера через браузер? Файл записан на HDD, а среда - LAMP.файл времени загрузки файла
Спасибо.
Конечно, есть. Вы должны либо использовать 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:
Измененный, чтобы проверить, если он действительно работал - Марк сделал меня вопрос это! ;) Требуется незначительная настройка (особенно в микро-время), но да, это работает!
Один из способов заключается в прокси-загрузке с помощью скрипта (может быть легко достигнуто с помощью mod_rewrite). Это означает, что вам необходимо выполнить всю работу, например, расширение отображения в соответствующие типы mime (для заголовка Content-Type). Попробуйте загрузить файл из своего браузера и взгляните на заголовки, которые он отправляет; вам нужно имитировать их. Вы можете использовать, например. web -sniffer.net для проверки заголовков.
Автору вопроса - теперь, вероятно, AWOL - этот ответ также замечателен, потому что, если вы планируете делать это по нескольким типам файлов, вам нужно будет проверить их типы mime и соответствующим образом адаптировать их. – Frankie
Я не думаю, что PHP будет иметь доступ к этой информации. Я не уверен, что Apache сообщит вам об этом, или будет ли приведенный ниже метод также время до тех пор, пока файл не будет сброшен в буфер передачи, но я бы предложил вам попробовать следующее:
Определите пользовательский журнал, в котором вы включить директиву «% D», это дает вам «Время, затраченное на выполнение запроса в микросекундах».
Действительно ли это работает? Я подумал, что настанет время, пока не дойдет до этого сценария ... почему он дождался завершения отправки файла? – mpen
Я должен был сделать только некоторые настройки, и приведенный выше код был доказательством концепции, но да, он регистрирует используемое время. PHP является синхронным и поэтому должен ждать, пока readfile() будет продолжать свою жизнь. – Frankie
PHP может быть синхронным, поскольку он ждет, пока не будет выполнено readfile(), но это ничего не говорит о остальной части стека. Apache может очень хорошо (и, скорее всего, делает) принять полный файл в RAM-память сервера и отправить его медленно до тех пор, пока readfile(), и ваш скрипт не завершится ... – Wim