Подсчёт скачиваний

  • Автор темы TheBest
  • Дата начала

netklon

Новичок
Автор оригинала: bettrrr
Какой из предложенных?
PHP:
Action throw /filez/index.php

<FilesMatch (.*)>
ForceType throw
</FilesMatch>

<FilesMatch index.php>
ForceType application/x-httpd-php
</FilesMatch>
Пишем это в .htacess в папку filez (предположим, что ссылка будет вида site.com/filez/file.zip).

В сам index.php пишем:

PHP:
$file_dir = "/home/user";
$file_name = str_replace("/filez/", "", $_SERVER["REQUEST_URI"]);
$file_name = str_replace("//", "/", $file_name);
if (is_file($file_dir."/".$file_name)) 
  {
  header("HTTP/1.0 200 OK");
  echo implode(file($file_dir."/".$file_name));
  }
else
  {
  header("HTTP/1.0 404 Not Found");
  }
 

Dios de Lammos

Guest
Crazy
Ну действительно, зачем столько маячни? Я думаю не так уж нам и дороги пользователи пришедшие по прямому линку... Я не думаю что их будет очень много...
 

2People

Guest
netklon
echo implode(file($file_dir."/".$file_name));

Интересно, что произойдёт с этим скриптом, если для скачивания будет фильм на 700Мб?
 

netklon

Новичок
bettrrr
Именно с этим - будет задница. Я его привел в пример как наиболее простое и универсальное решение.
Однако нет ничего сложного дописать скрипт, чтобы он выдавал содержимое файла в исходящий поток постепенно. Где-то в форуме кажется видел тему, где обсуждалось как отдавать файл скриптом с возможностью докачки.

-~{}~ 09.03.04 08:19:

bettrrr

echo implode(file($file_dir."/".$file_name)); - это легко кстати можно заменить на
PHP:
$fp = fopen($file_dir."/".$file_name, "r");
while (!feof($fp))
  {
  echo fgets($fp);
  }
 

2People

Guest
Так и будешь дописывать постоянно?
Самое простое через header ("Location:..............");

А в твоём варианте надо определять MIME и т.п смотри свой превый постинг, и читай последующие сообщения.

-~{}~ 09.03.04 12:03:

Автор оригинала: netklon
bettrrr
Однако нет ничего сложного дописать скрипт, чтобы он выдавал содержимое файла в исходящий поток постепенно. Где-то в форуме кажется видел тему, где обсуждалось как отдавать файл скриптом с возможностью докачки.
Тебе не кажется что это лишнее для простого счётчика скачиваний?
 

netklon

Новичок
bettrrr
В том то и дело, что если хочешь простенький счетчик, который обойти - раз плюнуть, и иметь неверную статистику скачиваний, то вариант с Location:.... сойдет.
Ну а если более-менее точный подсчет - тут и надо задействовать решения поточнее.
 

2People

Guest
Чем он не точный? Никто не будет смотреть свойства ссылки и вырезать из download.php?file.zip прямую ссылку file.zip. Это не имеет смысла? И если даже кто-то начнёт страдать такой х...., то это будут максимум сотые процента всех скачавших этот файл.
 

Falc

Новичок
Для счетчика скачиваний алгоритм bettrrr'а будет самым простым и оптимальным. Другое дело когда надо ограничить доступ к файлу, тогда только скриптом отдавать файл.


netklon
вместо: echo implode(file($file_dir."/".$file_name));
лучше написать: readfile($file_dir."/".$file_name);
 

Crazy

Developer
Falc, для счетчика скачиваний оптимальным будет анализ логов. :)
 

Falc

Новичок
Crazy
Согласен, правда логи могут быть не свегда доступны.
 

netklon

Новичок
bettrrr

Я уже говорил, что для простенькой системы счета метод локейшна сойдет. Ну а для нормальной статистики, которая должна учитывать всё - это хило.
 

TheBest

Guest
Автор оригинала: netklon
Даешь ссылку вида <a href="/download/file.zip>###</a>".
В папку /download кладешь .htaccess, который редиректит любую ссылку из данного каталога на скриптик скажем index.php
Это мне подходит, спасибо.

А если в методе с location пользователь подкорерктирует ссылку в ../../../и_так_далее_к_файлу_который_ему_нельзя_смотреть?
 

WebByte

Проходящий мимо
Автор оригинала: bettrrr
Чем он не точный? Никто не будет смотреть свойства ссылки и вырезать из download.php?file.zip прямую ссылку file.zip. Это не имеет смысла? И если даже кто-то начнёт страдать такой х...., то это будут максимум сотые процента всех скачавших этот файл.
Если бы. Пример из практики.
Выложил клип на сайт. Отдавал его как раз Header("Location: ...");
Через 15 минут на форуме появилась прямая ссылка..
За месяц скачали по ссылке 670 человек, всего файл скачали 824 человека... вот тебе и сотые процента..
 

SiMM

Новичок
Автор оригинала: netklon
Пишем это в .htacess в папку filez (предположим, что ссылка будет вида site.com/filez/file.zip).
В сам index.php пишем:
PHP:
<? echo $_SERVER['REQUEST_URI'];?>
Не работает - т.е. такое ощущение, что .htaccess игнорируется (при обращении к картинке, лежащей в папке - показывается картинка, к скрипту - REQUEST_URI, к несуществующему файлу - 404). Не подскажете, в чём может быть дело? (WinXP, PHP 4.3.2, Apache 1.3.24).
 

netklon

Новичок
SiMM
Проверь AllowOverride All для этой папки в конфигах Apache выставлен?
 

kombo

Новичок
Я сделал счетчик по принципу как предложил 2People. download.php открывается в новом окне и отправляет хедером на файл.
IE6 затем за собой пустое окно с download.php закрывает, как сделать чтобы в NN и Opera промежуточное окно тоже закрывалось ?
 
Сверху