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

Форум PHP

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

 

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

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

тема: Счётчик загрузки файла (без базы данных)
 
 автор: Санька   (27.11.2007 в 22:46)   письмо автору
 
 

Нужно чтоб при нажатии ссылки (в которой допустим программа) под ссылкой показывало сколько человек скачало программы, без исползования БД. Если у кого есть, поделитесь плиз!

   
 
 автор: bronenos   (27.11.2007 в 23:53)   письмо автору
 
   для: Санька   (27.11.2007 в 22:46)
 

без бд? на файлах?

   
 
 автор: Санька   (28.11.2007 в 00:21)   письмо автору
 
   для: bronenos   (27.11.2007 в 23:53)
 

На файлах, ну как, код (после чтоб в файл записывало сколько раз скачали) и выводилось это число в браузере (ну понимаете).

   
 
 автор: Саня   (28.11.2007 в 00:02)   письмо автору
 
   для: Санька   (27.11.2007 в 22:46)
 

А как происходит учёт?

   
 
 автор: Санька   (28.11.2007 в 00:25)   письмо автору
 
   для: Саня   (28.11.2007 в 00:02)
 

Как понять? После нажатии на ссылку записывается 1 в файл еще раз нажал еще 1 записывается в файле плюсуется и показывает общее количество 2 и выводится в браузер общее количество скачиваний.

   
 
 автор: Санька   (28.11.2007 в 00:34)   письмо автору
 
   для: Санька   (28.11.2007 в 00:25)
 

Пример http://wap.siemens-club.ru/?mod=video&file_id=o93p6C

   
 
 автор: Trianon   (28.11.2007 в 00:37)   письмо автору
 
   для: Санька   (28.11.2007 в 00:34)
 

Вы полагаете, там не применяется БД?

   
 
 автор: Санька   (28.11.2007 в 00:44)   письмо автору
 
   для: Trianon   (28.11.2007 в 00:37)
 

А причем тут применяется там БД или нет, зачем мне база чтоб хранить одну цифру!!! Проще в файл чтоб записывалось.

   
 
 автор: Trianon   (28.11.2007 в 01:13)   письмо автору
 
   для: Санька   (28.11.2007 в 00:44)
 

проще для кого?

   
 
 автор: Unkind   (28.11.2007 в 02:05)   письмо автору
 
   для: Санька   (28.11.2007 в 00:44)
 

А что, количество загрузок будет так мало, что их можно будет выразить одной цифрой? :)

   
 
 автор: Санька   (28.11.2007 в 04:07)   письмо автору
 
   для: Unkind   (28.11.2007 в 02:05)
 

Гг накосячил :) так и знал что зацепится кто нибудь :) ну не одна а от 0 до бесконечности, мужики ну так стоит мне ждат помощи, или бесполезно?

   
 
 автор: Faraon   (28.11.2007 в 08:51)   письмо автору
 
   для: Санька   (28.11.2007 в 04:07)
 

И какое вы планируете количество файлов использовать?
Как я понимаю для каждой программы свой должен быть файл.
По моему здесь проще использовать БД.

   
 
 автор: Gemorroj   (28.11.2007 в 09:17)   письмо автору
 
   для: Faraon   (28.11.2007 в 08:51)
 


file_put_contents('count.dat',(int)file_get_contents('count.dat')+1);

   
 
 автор: Faraon   (28.11.2007 в 09:50)   письмо автору
 
   для: Gemorroj   (28.11.2007 в 09:17)
 

Вы это мне ответили ?

   
 
 автор: Gemorroj   (28.11.2007 в 11:19)   письмо автору
 
   для: Faraon   (28.11.2007 в 09:50)
 

>Вы это мне ответили ?
Нет, скорее автору темы =)

   
 
 автор: Санька   (28.11.2007 в 17:01)   письмо автору
 
   для: Gemorroj   (28.11.2007 в 09:17)
 

Как им пользоваться? При обновлении страницы плюсуется 1.

   
 
 автор: Санька   (28.11.2007 в 16:02)   письмо автору
 
   для: Faraon   (28.11.2007 в 08:51)
 

1 файл, в нём 2 проги

   
 
 автор: mihdan   (28.11.2007 в 10:47)   письмо автору
 
   для: Санька   (27.11.2007 в 22:46)
 

IMHO лучше юзать MySQL - проблем меньше. Да плюс ко всему готовое решение в книге есть!

   
 
 автор: Санька   (30.11.2007 в 18:12)   письмо автору
 
   для: mihdan   (28.11.2007 в 10:47)
 

Не, спасибо, мне бы на файлах.

   
 
 автор: moonfox   (30.11.2007 в 18:42)   письмо автору
 
   для: Санька   (30.11.2007 в 18:12)
 

:))))

примерно так

ссылка на файл www.my.com/file.zip?dl=1


пишем
<?


$dl
=$_GET['dl'];
if(
$dl)
{

$f=fopen("otstoi.txt","r+");
$p=fgets($f,10);
$p=intval($p);
$p=$p+1;
rewind($f);
fputs($f,$p);
fclose($f);
}

?>




смотрим

<?

$f3
=fopen("otstoi.txt","r");
$g3=fgets($f3,10);
echo 
$g3;

?>



   
 
 автор: Санька   (30.11.2007 в 19:51)   письмо автору
 
   для: moonfox   (30.11.2007 в 18:42)
 

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

   
 
 автор: Санька   (30.11.2007 в 20:12)   письмо автору
 
   для: moonfox   (30.11.2007 в 18:42)
 

Я имею ввиду чтоб в txt файле было 2 строки, в одной число загрузок от одной проги, в др. строке число загрузок от другой проги.

   
 
 автор: sim5   (30.11.2007 в 20:46)   письмо автору
 
   для: Санька   (30.11.2007 в 20:12)
 

Создайте файл, например, satics.php. Пропишите в нем:

<?
define
('STAT1'0); //константа, определяющая число загрузок файла 1 
define('STAT2'0); //константа, определяющая число загрузок файла 2
?>

Учет загрузок файлов:

<?
//если есть загрузка
require_once("satics.php");
$cnt1 = !empty($_GET['file1']) ? STAT1 STAT1//число загрузок фйла 1
$cnt2 = !empty($_GET['file2']) ? STAT2 STAT2//число загрузок фйла 2
//запись новых значений
$f fopen("satics.php","w");
flock($fLOCK_EX);
fputs($f,"<?php\ndefine('STAT1', '".$cnt1."');\n");
fputs($f,"define('STAT2', '".$cnt2."');\n?>");
flock($fLOCK_UN);
fclose($f);
//теперь можно всегда и в любом месте обратившись к константам, получить число загрузок файлов
echo STAT1;
?>

   
 
 автор: Valick   (30.11.2007 в 21:28)   письмо автору
 
   для: sim5   (30.11.2007 в 20:46)
 

Всё хорошо, только все забывают про блокировку файла во время записи. (подводный камень при использовании файлов вместо БД)
Гляньте тему: http://softtime.ru/forum/read.php?id_forum=1&id_theme=44056 скипт, я думаю, сможете адаптировать под свои нужды.

   
 
 автор: sim5   (30.11.2007 в 21:32)   письмо автору
 
   для: Valick   (30.11.2007 в 21:28)
 

Это как бы подразумевается, что надо! ;-)

   
 
 автор: Санька   (30.11.2007 в 21:34)   письмо автору
 
   для: sim5   (30.11.2007 в 21:32)
 

Так мне ставить этот код? Надежный?

   
 
 автор: Valick   (30.11.2007 в 21:38)   письмо автору
 
   для: Санька   (30.11.2007 в 21:34)
 

Мы не можем знать куда и что вам ставить, мы можем указать вектор направления , а дальше "прощай земля, в добрый путь"))

   
 
 автор: sim5   (30.11.2007 в 21:39)   письмо автору
 
   для: Санька   (30.11.2007 в 21:34)
 

Надежный это база, а это простой :) Он ничем не отличается от предложенных выше текстовых файлов. Но это не простой файл, а файл в котором определяются константы, чтобы их получить, вам достаточно в нужном месте сделать подключение этого файла, и обратиться к константам. Константы пишутся в РНР в верхнем регистре, это вам для информации. Подключили и взяли... А что вам лучше подойдет, выбирайте сами.

PS. Если у вас запросы идут через индексный файл, то достаточно такой файл подключить один раз, правда если в нем потребность всегда имеется.
PPS. Подправил, чтобы без лишних вопросов. )

   
 
 автор: Санька   (30.11.2007 в 22:31)   письмо автору
 
   для: sim5   (30.11.2007 в 21:39)
 

Не работает, показывает 0, и не понятно куда данные записываются.

   
 
 автор: sim5   (01.12.2007 в 02:46)   письмо автору
 
   для: Санька   (30.11.2007 в 22:31)
 

Александр, у вас скорее всего не один из предложенных выше вариантов работать не будет. Все работает, если вы только не скопировали "вслепую", и проверяете то, чего у вас не существет, например, $_GET['file1']. Я не знаю как вам объяснить деликатно, но куда и что записывается, видно из кода.

   
 
 автор: Санька   (01.12.2007 в 03:08)   письмо автору
 
   для: sim5   (01.12.2007 в 02:46)
 

Да я просто не пойму, есть у меня 2 файла (1.rar и 1.zip в ссылках) и что мне делать? Я на $_GET['file1'] смотрю просто тупо и не вкурю пробывал так $file1="1.rar"; без результатно.

   
 
 автор: Faraon   (01.12.2007 в 03:25)   письмо автору
 
   для: Санька   (01.12.2007 в 03:08)
 

>1.rar и 1.zip в ссылках
Что значит в ссылках?

   
 
 автор: sim5   (01.12.2007 в 03:34)   письмо автору
 
   для: Санька   (01.12.2007 в 03:08)
 

А вы не смотрите так. Как вы узнаете в своем коде, что у вас клиент запросил файл на загрузку и какой? Если вы этого не знаете, то я тем более. Поэтому я и пишу (для примера), предполагая например, что пользователь кликает по ссылке, в которой будет переменная file1 (для первого файла, для второго file2), а вы определяя ее, отдаете файл и записываете показания в счетчик. Повторяю с разъяснениями:

//пусть это файл stat.php
<? 
define
('STAT1'0); //константа, определяющая число загрузок файла 1  
define('STAT2'0); //константа, определяющая число загрузок файла 2 
?>

Учет загрузок файлов, где-то в каком-то месте кода:

<? 
//если есть загрузка файла, а на примере (НО не в вашем коде!!!) я это проверяю
//как наличие переменной $_GET['file1'] при запросе на загрузку первого файла
//и $_GET['file2'] при запросе на загрузку второго файла.
//Внимание! Замените эти переменные своими реальными переменными!
//Подключаем файл stat.php. Если в вашем коде, запросы идут через index.php
//и статистика загрузок применяется часто, и во многих местах
//можете сделать это подключение один раз, в индексном файле.    
require_once("stat.php"); 
//если запрошен фйл 1, то увеличим константу числа загрузок этого файла на 1
//иначе оставим без изменения
$cnt1 = !empty($_GET['file1']) ? STAT1 STAT1;
//если запрошен фйл 2, то увеличим константу числа загрузок этого файла на 1
//иначе оставим без изменения
$cnt2 = !empty($_GET['file2']) ? STAT2 STAT2
//запись новых значений
//открываем файл 
$f fopen("stat.php","w");
//блокируем доступ к файлу 
flock($fLOCK_EX); 
//перезаписываем весь файл stat.php заново
fputs($f,"<?php\ndefine('STAT1', $cnt1);\n"); 
fputs($f,"define('STAT2', $cnt2);\n?>");
//разрешаем доступ к файлу 
flock($fLOCK_UN);
//закрываем дескриптор 
fclose($f); 
//Все. Теперь можно выводить 
?>

Замените временно эти строки:

<?
$cnt1 
= !empty($_GET['file1']) ? STAT1 STAT1;
$cnt2 = !empty($_GET['file2']) ? STAT2 STAT2;
//вот на эти строки
$cnt1 STAT1 1;
$cnt2 STAT2 1;
//и напишите
echo STAT1.'<br>'.STAT2;
//и убедитесь в работоспособности, запустив тест, и повторяя его по F5

Все, более я не знаю как еще объяснить. В отличие от первого варианта, здесь укорочено, но это потому, что значения у констант, это числа, и не обязательно их обрамлять в кавычки.

PS. >пробывал так $file1="1.rar"; без результатно
Например, ссылка на запрос загрузки файла, содержит путь к скрипту загрузчика с переменной file и параметром, определяющим файл. Если параметр равен 1, то запрашивают файл 1.rar, если 2, то 2.rar:
<A HREF="path/scriptname.php?file=1">Загрузить файл 1</A>
Вот тогда в скрипте обработчика загрузки (scriptname.php) пишите (после того как определили, что действительно требуют файл):

<?
//вместо
$cnt1 = !empty($_GET['file1']) ? STAT1 STAT1;
$cnt2 = !empty($_GET['file2']) ? STAT2 STAT2;
//вот так, например
if ($_GET['file']==1)  {
    
$cnt1 STAT1 1$cnt2 STAT2;
  } else {
    
$cnt2 STAT2 1$cnt1 STAT1;
}
?>

Но можете передавать в переменной и имя файла, и сравнивать по имени.

   
 
 автор: Санька   (01.12.2007 в 05:05)   письмо автору
 
   для: sim5   (01.12.2007 в 03:34)
 

Вот условие поставил и заработало, проверяю на стабильность.

   
 
 автор: Санька   (02.12.2007 в 18:30)   письмо автору
1.3 Кб
 
   для: sim5   (01.12.2007 в 03:34)
 

Работает не стабильно, посмотрите пожалуйста. Первая стр. работает стабильно, а вторая со вторым файлом не стабильно, при обновлении стр. прибавляется число. Не ругайте сильно :) но разобраться вашему ученику не получается!

   
 
 автор: sim5   (02.12.2007 в 18:46)   письмо автору
 
   для: Санька   (02.12.2007 в 18:30)
 

Что это означает?:

<?
if(!isset($_GET['a'])) $_GET['a']=1;
  switch(
$_GET['a'])
//а если установлена, то чему тогда равна?

Я вообще не понимаю, когда у вас может наступить ситуация, когда будет доступна страница 2.
Я вам упоминал, что числа не обязательно заключать в кавычки, пишите проще, так как позже было указано.

   
 
 автор: Санька   (02.12.2007 в 18:58)   письмо автору
 
   для: sim5   (02.12.2007 в 18:46)
 

Это условие обозначает что при любом раскладе открывается первая страница case1 если допустим войду по ссылке так z.ru/index.php
Вторая стр. index.php?a=2
Первая стр. index.php и index.php?a=1

   
 
 автор: sim5   (02.12.2007 в 19:13)   письмо автору
 
   для: Санька   (02.12.2007 в 18:58)
 

Это я видел, но вот ваша логика кода:

<?
$file1
="san.php?file=1";
$file2="san.php?file=2";
if(!isset(
$_GET['a'])) $_GET['a']=1;
switch(
$_GET['a'] {
  case 
1'Text... <a href="'.$file1.'">Link 1</a>';
  break;
  case 
2'Text... <a href="'.$file2.'">Link 2</a>';
}

Откуда вы берете $_GET['a'] мне не известно, но если case 2 будет выполнено, то только в этом случае можно будет закачать файл 2, а значит и увеличить значение счетчика. Ищите причину в этом, а не в самом способе изменения счетчика. Кстати, в вашем случае большой выгоды от использования констант не будет.

   
 
 автор: Санька   (02.12.2007 в 19:47)   письмо автору
 
   для: sim5   (02.12.2007 в 19:13)
 

От куда вы берёте $_GET['a']? Я её не могу брать не откуда так как она ещё не известна, но по умолчанию она равна 1. Я так понимаю причина сбоя из за ?a=1 или 2... так как присутствует ?file=1 и 2 тогда как поправить это?

   
 
 автор: sim5   (02.12.2007 в 20:29)   письмо автору
 
   для: Санька   (02.12.2007 в 19:47)
 

Вот этого я не могу сказать, для этого нужно знать все, что вы задумали. Если она у вас не известна, то у вас никогда и не будет ссылки на загрузку файла 2. Хотите просто проверить саму работу счетчика? Просто без конструкции switch поместите две ссылки $file1и $file2, делайте запросы и проверите, а насчет дальнейшего - думайте.

   
 
 автор: Митя   (24.12.2007 в 15:14)   письмо автору
 
   для: sim5   (02.12.2007 в 20:29)
 

Я тоже не могу разобраться в счётчиках, и поэтому данная страница меня очень интересует.
Я как понял, выше, Санькин архив 1,3 Кб. работает от обновлений страниц, а не от перекачки файла.
Тут этого я не пойму:
 $cnt1 = STAT1 + 1;
 $cnt2 = STAT2;
  }
  else
  {
 $cnt2 = STAT2 + 1;
 $cnt1 = STAT1;

А если 20 или 30 ссылок, то как их все переплести между собой ? А если попробовать скрипт каждого счётчика перекачек при условии генерации этого же счётчика увеличивать на 1. Причём сдесь зависимость от других счётчиков? Помогите пожалуйста разобраться !!!

   
 
 автор: sim5   (24.12.2007 в 16:23)   письмо автору
 
   для: Митя   (24.12.2007 в 15:14)
 

Что значит "переплести"? Считать общиее число загрузок этих файлов? Если да, то потребуется одна переменная, а если нет, то нужно столько переменных, сколько и файлов.

   
Rambler's Top100
вверх

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