Подсчёт кол-во загрузок

Тема в разделе "PHP", создана пользователем Braniack, 18 дек 2008.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Braniack

    Braniack

    Регистр.:
    25 май 2008
    Сообщения:
    160
    Симпатии:
    45
    Вообщем мне нужно реализовать примерно следущее.

    У меня есть софт-портал. Все файлы хранятся у меня на сервере, скачка идет по прямым ссылкам, т.е _http://mysait/soft/programma.zip

    Мне нужен скрипт, который будет высчитывать кол-во всех обращений к папке где софт, и выводить статистику. (На какую ссылку (какую прогру) больше всего загружали).

    Движок у меня DLE, но по скоку я файлы не прикрпеляю, то определить какая програ скока раз загружалась не получится.

    Вообщем подскажите как решить данную проблему (если можно решение :) :) )
     
  2. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    591
    Либо отдавать файлы не напрямую, а через скрипт и вести учёт в нём, либо парсить логи web-сервера.
     
  3. Braniack

    Braniack

    Регистр.:
    25 май 2008
    Сообщения:
    160
    Симпатии:
    45
    Да я вот тут набросал скрипт

    PHP:
    <?php
    // Счетчик по первому файлу: 

    if ($info==1) {
    header("location: http://blbla/soft/proga.zip"); 
    $file=fopen("info.txt","a+");
    flock($file,LOCK_EX); 
    $count=fread($file,100);
    $count++; 
    ftruncate($file,0); 
    fwrite($file,$count); 
    flock($file,LOCK_UN); 
    fclose($file); 
    }

    ?>
    Но этот скрипт не разумный, если учесть что у меня около 300 прог, и каждый раз ссылки править будет неочень...

    С этого места, можно по подробнее?
     
  4. Jameson

    Jameson Читатель

    Заблокирован
    Регистр.:
    25 июн 2007
    Сообщения:
    406
    Симпатии:
    92
    Модификация первого варианта: с помощью mod_rewrite перекидывать все обращения к файлам на скрипт, занимающийся учетом. Ничего вручную прописывать не надо, для ведения статистики можно использовать БД.
    Правда, придется программно отдавать файлы.
     
  5. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    591
    Зачем?
    Достаточно редиректа со скрипта на прямую ссылку.

    Подробнее о чём?
     
  6. Braniack

    Braniack

    Регистр.:
    25 май 2008
    Сообщения:
    160
    Симпатии:
    45

    Мм, по подробнее если не сложно как сделать относительно моего скрипта. Т.к суть моего скрипта состоит в том, что я обращаюсь не к файлу а к СКРИПТУ, а он уже в свою очередь в Location: переадресовывает на файл.

    А как реаизовать то что ты говоришь, покажи плз
     
  7. anarki

    anarki Прохожие

    PHP:
    <?php
    // пишешь статистику

    $file_url 'http://реальное_расположение файла'// прямая ссылка на файл
    header('Location: '.$file_url);
     
  8. fredis69

    fredis69 Постоялец

    Регистр.:
    25 окт 2008
    Сообщения:
    84
    Симпатии:
    2
    Если данные по программе извлекаются из БД, то тогда можно сделать отдельную страницу loadings_programm.php, на которой будет происходить загрузка программы. В данном примере мы взяли таблицу programm в которой храница описание программы и всё остальное.
    В данную таблицу надо добавить 2 поля.
    1-ое поле loadings в котором будет храниться число скачиваний.
    2-ое поле reference в котором будет храниться ссылка на программу.

    На странице описания программы вставляем ссылку, в которой методом GET будет передаваться id программы в файл loadings_programm.php:

    Код:
    <a href="loadings_programm.php?id=<?php echo $myrow ['id'];?>" target="_blank">Скачать программу</a>

    В файле loadings_programm.php пишем следующий код:

    PHP:
    <?php 
    /*Соединяемся с базой данных*/
    $db mysql_connect ("localhost","имя пользователя","пароль");
    mysql_select_db ("имя Базы Данных",$db);
    /*конец*/

    /*$id присваеваем значение id программы которое мы передовали по ссылке*/
    if (isset($_GET['id'])) {$id $_GET['id'];}
    /*конец*/

    /*Вытаскиваем из БД число скачиваний из поля [B]loadings [/B]и ссылку из поля [B]reference[/B]*/
    $result mysql_query("SELECT loadings,reference FROM programm WHERE id='$id'",$db);
    $myrow mysql_fetch_array ($result); 

    /*Обновляем поле скачиваний и прибовляем 1 к числу скачиваний*/
    $new_loadings $myrow['loadings'] + 1;
    $update mysql_query ("UPDATE programm SET loadings='$new_loadings' WHERE id='$id'",$db);
    /*конец*/

    $url $myrow ['reference'];   
     
    $URL="$url";header("Location:$URL");
    exit();
    ?>
    Добавлено через 9 минут
    Если вы будите использовать пример приведённый выше, то обязательно в файле robots.txt запретите индекс файла loadings_programm.php.
    Иначе Yandex будет ругаться. А иногда и может забанить, у меня такое уже случалось, но после того как в robots.txt запретил индекс данного файла вроде всё нормально.
     
  9. BDS

    BDS Читатель

    Заблокирован
    Регистр.:
    7 янв 2009
    Сообщения:
    42
    Симпатии:
    2
    что то не пойму, а чем вариант с mode rewrite не устраивает?.. имхо это действительно верный путь - обработать прямы ссылки..

    т.е. в htaccess пишем что то вроде
    Код:
    RewriteEngine on
    RewriteRule ^programs/(.*)$ programs_log.php?program=$1
    
    а в programs_log.php напр
    PHP:
    $program $_GET['program'];

    if( empty(
    $program) ){
    // обработка прямого обращения
    exit();
    }

    $conn mysql_connect 'mysql_host''имя пользователя''пароль');
    mysql_select_db 'имя базы'$conn );

    mysql_query'INSERT INTO programs_log (  `program` ) VALUES ( " ' mysql_real_escape_string$program ) . ' " )
    ON DUPLICATE KEY UPDATE count = count + 1'
    $conn );

    header('Location: ' $program);
    структура mysql таблицы такова
    [SQL]
    CREATE TABLE `programs_log` (
    `program` varchar(255) NOT NULL default '',
    `count` int(10) unsigned NOT NULL default '0',
    PRIMARY KEY (`program`)
    ) ENGINE=MyISAM DEFAULT CHARSET=cp1251
    [/SQL]

    в общем случае вроде все..

    зы.. синтаксис не проверял, писал сходу
     
  10. FL@SH

    FL@SH Читатель

    Заблокирован
    Регистр.:
    20 июл 2008
    Сообщения:
    193
    Симпатии:
    25
    Помойму на 4dle.ru валяется мод, который отдаёт файлы через скрипт. и ТАм идёт не переадресация. Там ставится определённый хедер и идёт чтение файла
    ЗЫ Скорость загрузки тоже можно регулировать
     
Статус темы:
Закрыта.