Просмотр полной версии : Счетчик закачек на пхп
Tyler Durden
21.06.2005, 11:54
Написал вот простейший счетчик закачек:
<?
$counter_file="counter/".$file.".txt";
if($contents=@file($counter_file)){
$count=$contents[0]+1;
}else{
$count=1;
}
$f=fopen($counter_file,"w");
fwrite($f,$count);
fclose($f);
header("location: /$file");
?>
Файл-то он отдает, закачки считает, только имя у файла "download.zip" (если пользуешься Opera) или "download.php" (если IE)... Менеджеры закачек все нормально обрабатывают, чего делать ?
П.С. Если не трудно, кто хорошо знает кросс-браузерный хтмл, можете посмотреть
http://tylerdurden.net.ru/guestbook.php почему в IE "разъезжаются рамочки от input'ов (в Opera все ок-об)
Спасибо.
header("Content-Disposition: attachment; filename=myfile.zip");
А, не посмотрел на твой код, т.е. ты просто считаешь количество переходов.
Ну, если так он подставляет не корректное имя файла, то попробуй редиректить пользователя не заголовком (это вообще не очень хорошо), а таким способом
echo '<META HTTP-EQUIV="refresh" CONTENT="0; URL=/files/file.zip">';
Вообще, так как ты редиректишь пользователя туда, где файл лежит физически, то твою "считалку" легко обойти. Отдавай файл скриптом...
<?
$file_name = './who.zip';
if (!file_exists($file_name)) {
header ("HTTP/1.0 404 Not Found");
exit;
}
$fsize = filesize($file_name);
$ftime = date("D, d M Y H:i:s T", filemtime($file_name));
$file_handler = @fopen($file_name, "rb");
if (!$file_handler) {
header ("HTTP/1.0 403 Forbidden");
exit;
}
if ($HTTP_SERVER_VARS["HTTP_RANGE"]) {
$range = $HTTP_SERVER_VARS["HTTP_RANGE"];
$range = str_replace("bytes=", "", $range);
$range = str_replace("-", "", $range);
if ($range) {
fseek($file_handler, $range);
}
}
if ($range) {
header("HTTP/1.1 206 Partial Content");
} else {
header("HTTP/1.1 200 OK");
}
header("Content-Disposition: attachment; filename=myfile.zip");
header("Last-Modified: $ftime");
header("Accept-Ranges: bytes");
header("Content-Length: ".($fsize-$range));
header("Content-Range: bytes $range-".($fsize-1)."/".$fsize);
header("Content-type: application/octet-stream");
while (!feof ($file_handler)) {
echo fread($file_handler, 100);
}
fclose($file_handler);
exit;
?>
Осталось добавить считалку. К стати теперь можнос читать, какой объем выкачал пользователь.
Простенький, но для начала может хватить.
Lord of rings
22.06.2005, 12:31
Я бы делал счетчик с учетом хостов, сливал бы всю информацию в MYSQL. Тогда была бы полная статистика
Tyler Durden
22.06.2005, 12:43
Спасибо... Правда сейчас еще не имею возможности проверить в полном объеме (чет на работе доступ тормозит :( ) Вариант с meta-тэгом не пашет, менеджеры качают его как html (именно ту страницу де прописан meta). MySQL для хомпаги ?! Я ж не microsoft с их гигантоманией.
Делаешь линк на файл в пустую папку. Там помещаешь файл .htacсess, в котором на 404 ошибку прописываешь переадресацию на пхп скрипт. В скрипте выдашь нужный файл и инкрементируешь счетчик.
Лучше mod_rewrite, или forceType, иначе лог загадится =)