Конечно, есть. Вам придется либо использовать 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), но да, она работает !