Лучший способ отслеживания (прямой) загрузки файлов

Каков наилучший способ отслеживания загрузки файлов? Я нашел некоторое решение, например, следующее:

http://www.gayadesign.com/diy/download-counter-in-php-using-htaccess/

Но он не работает для меня, я получаю пустую страницу, когда пытаюсь загрузить файл +, я не знаю, что это достаточно безопасно или нет …

Google Analytics работает только с javascript, не может отслеживать прямые загрузки файлов.

Лучшим было бы безопасное и собственное решение.

Не стесняйтесь использовать 🙂

.htaccess:

RewriteEngine on RewriteRule ^(.*).(rar|zip|pdf)$ http://xy.com/downloads/download.php?file=$1.$2 [R,L] 

MySQL:

 CREATE TABLE `download` ( `filename` varchar(255) NOT NULL, `stats` int(11) NOT NULL, PRIMARY KEY (`filename`) ) 

download.php

 <?php mysql_connect("localhost", "name", "password") or die ("Sorry, can't connect to database."); mysql_select_db("dbname"); $baseDir = "/home/public_html/downloads"; $path = realpath($baseDir . "/" . basename($_GET['file'])); if (dirname($path) == $baseDir) { if(!is_bot()) mysql_query("INSERT INTO download SET filename='".mysql_real_escape_string(basename($_GET['file']))."' ON DUPLICATE KEY UPDATE stats=stats+1"); header("Cache-Control: public"); header("Content-Description: File Transfer"); header("Content-Disposition: attachment; filename=" . basename($_GET['file'])); header("Content-Length: ".filesize($path)); header("Content-Type: application/force-download"); header("Content-Transfer-Encoding: binary"); ob_clean(); ob_end_flush(); readfile($path); } function is_bot() { $botlist = array("Teoma", "alexa", "froogle", "Gigabot", "inktomi", "looksmart", "URL_Spider_SQL", "Firefly", "NationalDirectory", "Ask Jeeves", "TECNOSEEK", "InfoSeek", "WebFindBot", "girafabot", "crawler", "www.galaxy.com", "Googlebot", "Scooter", "Slurp", "msnbot", "appie", "FAST", "WebBug", "Spade", "ZyBorg", "rabaz", "Baiduspider", "Feedfetcher-Google", "TechnoratiSnoop", "Rankivabot", "Mediapartners-Google", "Sogou web spider", "WebAlta Crawler","TweetmemeBot", "Butterfly","Twitturls","Me.dium","Twiceler"); foreach($botlist as $bot) { if(strpos($_SERVER['HTTP_USER_AGENT'],$bot)!==false) return true; // Is a bot } return false; } ?> 

Источник – gayadesign.com

В ваших журналах apache должно быть много информации, но я думаю, что вы запрашиваете больше контроля над тем, что регистрируется и когда. Так что вы хотите сделать, это две страницы: одна со ссылкой на файл, а другая, которая отслеживает файл, например:

file_page.php

 <a href="download.php?id=1234">Download File!</a> 

download.php

 <? // Code to track the file using PHP, whether that means storing data in a database, saving to a log, or emailing you. I'd use a DB, like so: // Prep the vars $file_id = $_GET['file_id']; // You should sanitize this first. $file_path = '/files/'.$file_id.'.pdf'; // Save data to database mysql_query('INSERT INTO download_log SET file_id = '.$file_id.', date_downloaded = '.date('Ymd H:i:s').', user_id = '.$_SESSION['user_id']); // Now find the file and download it header('Content-type: application/pdf'); header('Content-Disposition: attachment; filename='.$file_id.'.pdf); // or whatever the file name is readfile($file_path); 

Во всяком случае, что-то в этом роде.

Страница будет пустой, когда все будет готово, но все браузеры должны начать загрузку файла при загрузке страницы.

Итак, что я здесь делаю, я сохраняю идентификатор файла, текущее время и время и идентификатор пользователя, который его скачивает (из переменной $ _SESSION). Вероятно, вы захотите хранить гораздо больше информации, например, IP-адрес пользователя, HTTP_REFERRER или другую информацию о $ _SERVER, чтобы вы могли отслеживать, откуда пришел пользователь и когда и что они скачали.

Удачи.