Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Скрипт-счетчик для скачиваемого файла
 
 автор: Илья   (29.03.2006 в 16:07)   письмо автору
 
 

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

Заранее благодарен. С уважением.

   
 
 автор: cheops   (29.03.2006 в 18:41)   письмо автору
 
   для: Илья   (29.03.2006 в 16:07)
 

У вас имеется готовый скрипт скрипт-счётчик тоже нужен?

   
 
 автор: Илья   (30.03.2006 в 16:38)   письмо автору
 
   для: cheops   (29.03.2006 в 18:41)
 

Да, у меня есть два. Но наладить их работу мне пока не удается. Оба скачены из интернета.
Первый:

<?
$cfile = "counter-data.inc";
$localip = "127.0.0.1";
$serverip = "127.0.0.1";
# Enter information on the next line, but only after you read the "c-readme.txt" file.
$browser_id = "";
if (file_exists ($cfile)) {
$fp = fopen ($cfile,"r+");
$data = fgets ($fp,25);
$ip = chop (substr($data,0,15));
$count = substr($data,15);
# Unremark the second "if" statement and remark the first one if your site is on a hosted
# server and you have a dynamic IP, but only after you read the "c-readme.txt" file.
if ($REMOTE_ADDR == $localip or $REMOTE_ADDR == $serverip)
# if ($REMOTE_ADDR == substr_count($HTTP_USER_AGENT,$browser_id) > 0)
$np = $ip;
else
$np = $REMOTE_ADDR;
if ($np != $ip)
$count += 1;
rewind ($fp);
fputs ($fp,substr($np." ",0,15).$count);
fclose ($fp);
echo $count;
}
else {
$fp = fopen($cfile,"w");
$np = $REMOTE_ADDR;
$count = "1";
fputs ($fp,substr($np." ",0,15).$count);
fclose ($fp);
echo $count;
}
?>

   
 
 автор: cheops   (30.03.2006 в 21:46)   письмо автору
 
   для: Илья   (30.03.2006 в 16:38)
 

А каков формат файла counter-data.inc - что в нём находится?

   
 
 автор: Илья   (31.03.2006 в 12:39)   письмо автору
 
   для: cheops   (30.03.2006 в 21:46)
 

Пишет: 127.0.0.1 1

   
 
 автор: Илья   (03.04.2006 в 19:35)   письмо автору
 
   для: Илья   (31.03.2006 в 12:39)
 

Вот у меня есть скрипт:

<?php
$ip=getenv("REMOTE_ADDR");
$date=date('d.m.Y',time());


$fo = fopen ("ip.txt", 'r');
flock($fo,1);
$data = fread ($fo, filesize("ip.txt"));
flock($fo,3);
fclose ($fo);

$f = fopen ("counter.txt", 'r''r');
flock($f,1);
$counts = fread ($f, filesize("counter.txt"));
flock($f,3);
fclose ($f);

list($d,$total,$hits,$hosts)=explode("|",$counts);

if ($d!=$date)
{
$d=$date;
$hits=0;
$hosts=0;
$erase=fopen("ip.txt",'w+');
flock($erase,2);
fputs($erase,"");

flock($erase,3);
fclose($erase);
}



if (!stristr($data,$ip))

{
$file=fopen("ip.txt",'a');
flock($file,2);
fputs($file,$ip."rn");

flock($file,3);
fclose($file);
$total++;
$hits++;
$hosts++;

}
else

{
$total++;
$hits++;
}


$wfile=fopen("counter.txt",'w+');
flock($wfile,2);
fputs($wfile,$d."|".$total."|".$hits."|".$hosts);

flock($wfile,3);
fclose($wfile);


include ("straz.html");
?>

Пожалуйста напишите руководство для ламеров. Куда counter.php нужно положить, что вписать в код страницы. И как должна выглядеть ссылка на файл для скачивания с учетом счетчика?

Зарание благодарен, с уважением, Илья.

   
 
 автор: cheops   (03.04.2006 в 23:26)   письмо автору
 
   для: Илья   (03.04.2006 в 19:35)
 

А у вас структура сайта какая - все файлы в одной куче, или имеются вложенные папки?

   
 
 автор: Илья   (05.04.2006 в 11:17)   письмо автору
 
   для: cheops   (03.04.2006 в 23:26)
 

Вложенные папки имеются. Речь идет о скачивании одного файла. И счетчик должен обсчитывать 1 линьк.

   
 
 автор: cheops   (05.04.2006 в 14:27)   письмо автору
 
   для: Илья   (05.04.2006 в 11:17)
 

Если у вас один файл давайте просто сами создадим счётчик (count.php):
<?php
  
// Имя файла для загрузки
  
$file "glava15.zip";
  
// Имя файла, где хранится значение счётчика
  
$filename "count.txt";
  
  
$num 0;
  
// Подсчитываем обращение
  
if(file_exists($filename))
  {
    
// Получаем текущее значение счётчика
    
$num file_get_contents($filename);
    
// Увеличиваем счётчик на единицу
    
$num $num 1;
  }

  
// Перезаписываем значение счётчика
  
$fd fopen($filename,"w");
  
fwrite($fd,$num);
  
fclose($fd);
  
  
// В заголовке отправляем ссылку на загружаемый файл.
  
echo "<META HTTP-EQUIV='Refresh' CONTENT='0; URL=$file'>";
?>

Здесь переменная $file - содержит имя скачиваемого файла, $filename - имя файла, где будет хранится число загрузок. Просто дайте ссылку на скрипт count.php - он будет подсчитывать обращения и выдавать посетителям файл. Количество загрузок можно будет получить из файла $filename при помощи незамысловатого кода
<?php
  
echo file_get_contents($filename);
?>

PS Если что-то не заладится - пишите, будем разбираться дальше.

   
 
 автор: Илья   (05.04.2006 в 15:09)   письмо автору
 
   для: cheops   (05.04.2006 в 14:27)
 

Спасибо!
У меня стоит Денвер. И что делать с прокси-сервером(У меня включен)? Нужно ли закачивать на сервер(Денвер) содержимое сайта?
В скрипте, написанном вами, кроме имени файла для загрузки, я что-либо еще должен изменить?
Заранее благодарен, с уважением.

   
 
 автор: cheops   (05.04.2006 в 23:18)   письмо автору
 
   для: Илья   (05.04.2006 в 15:09)
 

>У меня стоит Денвер. И что делать с прокси-сервером(У меня
>включен)?
А что вы хотите с ним сделать?

> Нужно ли закачивать на сервер(Денвер) содержимое
>сайта?
Для каких целей?

>В скрипте, написанном вами, кроме имени файла для загрузки,
>я что-либо еще должен изменить?
В принципе нет, больше ничего менять не нужно.

   
 
 автор: Бамси   (06.04.2006 в 05:57)   письмо автору
 
   для: cheops   (05.04.2006 в 23:18)
 

Хм мне надо тоже самое только файлов 20+
И надо это проделать через mysql.
Как быть?

   
 
 автор: cheops   (06.04.2006 в 13:18)   письмо автору
 
   для: Бамси   (06.04.2006 в 05:57)
 

Вы можете воспользоваться для эти целей скриптом FileCounter, который рассматривается в "PHP 5. Практика создания Web-сайтов" http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=7063.

   
 
 автор: Илья   (06.04.2006 в 17:02)   письмо автору
 
   для: cheops   (06.04.2006 в 13:18)
 

эм... понятно. А куда нужно вставить незамысловатый код?
И как сделать чтобы на странице со ссылкой на файл отображалось это самое количество скачиваний?

   
 
 автор: Илья   (06.04.2006 в 17:22)   письмо автору
 
   для: Илья   (06.04.2006 в 17:02)
 

Скрипт работает. Только в файл count.txt ничего не пишется...

   
 
 автор: cheops   (07.04.2006 в 00:47)   письмо автору
 
   для: Илья   (06.04.2006 в 17:22)
 

FileCounter работает с использованием базы данных.

   
 
 автор: sway   (07.04.2006 в 12:02)   письмо автору
 
   для: cheops   (05.04.2006 в 14:27)
 

есть такой код:

<?php 
$list 
file("папка/1.txt"); 
for (
$i=(sizeof($list)-1);$i>=0;$i=$i-1) { 
$part=explode("[n]",$list[$i]); 
echo 
'<a href="'.$part[0].'"><img border="0" align="top" height="16" width="16" src="skin/'.$skin_name.'/disk.gif">&nbsp;'.$part[1].'</a>'.$part[2].'<br>'
};  
?>

выводит он ссылки на файлы из текстового файла, как можно скрипт счетчика применить к этому коду?
в файле 1.txt следующее:
download/720.NES[n]720[n]128 Кб[n]Игрушка
download/T2.NES[n]T2[n]256 Кб[n]Игрушка

   
 
 автор: Илья   (07.04.2006 в 13:09)   письмо автору
 
   для: sway   (07.04.2006 в 12:02)
 

Уважаемый г-н Хеопс, скажите пожалуйста где нужно разместить этот код, что вы привели:
<?php
echo file_get_contents($filename);
?>

и еще такой вопрос. после нажатия на ссылку происходит автоматическое включение даунлоудера (DownloadMaster), т.е. открывается его главное окно, но (!)скачать(!) он не предлагает.
+ вышеописанное происходит только в том случае если даунлоадер не загружен.

P.S. так всё-таки на моей машине Апач должен стоять?
Заранее благодарен.

   
 
 автор: cheops   (07.04.2006 в 23:28)   письмо автору
 
   для: Илья   (07.04.2006 в 13:09)
 

>Уважаемый г-н Хеопс, скажите пожалуйста где нужно разместить
>этот код, что вы привели:
><?php
> echo file_get_contents($filename);
>?>
Там, где вам требуется вывести число загрузок... если не требуется - код можно никуда не вставлять.

>и еще такой вопрос. после нажатия на ссылку происходит
>автоматическое включение даунлоудера (DownloadMaster), т.е.
>открывается его главное окно, но (!)скачать(!) он не
>предлагает.
>+ вышеописанное происходит только в том случае если
>даунлоадер не загружен.
Это какой браузер имеется ввиду?

>P.S. так всё-таки на моей машине Апач должен стоять?
>Заранее благодарен.
Если на вашей машине не распалогается Web-сервер или вы не тестируете скрипты, то Apache не требуется.

   
 
 автор: Илья   (10.04.2006 в 18:08)   письмо автору
 
   для: cheops   (07.04.2006 в 23:28)
 

Спасибо за терпение! =)
Более или менее разъясняется...но..:
А как должна выглядть ссылка около надписи "Download"?
Где на сервере должны лежать файлы count.php и count.txt?

Пробовал разместить ваш код для вывода информации из лог-файла на странице рядом с "Download"... ничего не видно...
Заранее благодарен, с уважением.

   
 
 автор: cheops   (10.04.2006 в 22:55)   письмо автору
 
   для: Илья   (10.04.2006 в 18:08)
 

1) Файл count.txt должен лежать в той же директории, что и count.php.
2) Ссылка на загрузку файла - это просто ссылка на скрипт count.php.
3) В коде
<?php 
  
echo file_get_contents($filename); 
?>

$filename - это путь к файлу count.txt.

   
 
 автор: Илья   (13.04.2006 в 17:09)   письмо автору
 
   для: cheops   (10.04.2006 в 22:55)
 

.

   
 
 автор: Trianon   (13.04.2006 в 17:15)   письмо автору
 
   для: Илья   (13.04.2006 в 17:09)
 


$num = 0; 

if(file_exists($filename)) 
    $num = file_get_contents($filename) ; 

$num = $num + 1; 

   
 
 автор: Илья   (13.04.2006 в 18:20)   письмо автору
 
   для: cheops   (10.04.2006 в 22:55)
 

Ураа! Заработало.

А как сделать, чтобы рядом со ссылкой показывалось кол-во скачиваний? в скобочках, к примеру?

   
 
 автор: Илья   (17.04.2006 в 15:23)   письмо автору
 
   для: Илья   (13.04.2006 в 18:20)
 

с echo скриптом что-то не фурычит... может дело в правах доступа..? Так как вписать в скрипт скобки?
<?
echo file_get_contents ("/home/my_site/www/html/folder1/count.txt");
?>
Спасибо.

   
 
 автор: cheops   (17.04.2006 в 18:38)   письмо автору
 
   для: Илья   (17.04.2006 в 15:23)
 

Можно поступить следующим образом
<?
echo "(".file_get_contents ("/home/my_site/www/html/folder1/count.txt").")";
?>

   
 
 автор: Илья   (21.04.2006 в 15:17)   письмо автору
 
   для: cheops   (17.04.2006 в 18:38)
 

Ооо! Комрад! Спасибо! Всё. Всё заработало!
Выручил.

   
 
 автор: Mookapek   (01.05.2006 в 14:39)   письмо автору
 
   для: cheops   (05.04.2006 в 14:27)
 

А если файлов много?

   
 
 автор: cheops   (01.05.2006 в 14:54)   письмо автору
 
   для: Mookapek   (01.05.2006 в 14:39)
 

Вы можете воспользоваться для эти целей скриптом FileCounter, который рассматривается в "PHP 5. Практика создания Web-сайтов" http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=7063.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования