Ergebnis 1 bis 4 von 4

Thema: Wie baut man einen Zähler ein ????

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1

    Wie baut man einen Zähler ein ????

    Kann mir jemand mal sagen wie man einen Zähler einbaut, also wenn jemand auf einen Link klickt das dann der Zähler immer eins dazu bekommt oder so !!!???

    Hoffe das ich mich nicht zu unverständlich ausgedrückt habe !!!

    Also hier mal ein Beispiel:

    *Download* 0000

    So und wenn man dann auf Download klickt bekommt der Zähler immer 1 dazu, also sowas wie ein Besucherzähler !!!

  2. #2
    Für einen reinen Download-Zähler würde ich einen Counter erhöhen und dann die Datei ausgeben. Ein Script dafür:
    PHP-Code:
    <?php

    $datei 
    fopen($_GET['file'] . "_count""r");
    $besucher fread($datei,filesize($_GET['file'] . "_count"));
    fclose($datei);
    $besucher++;
    $datei fopen($_GET['file'] . "_count","w");
    fwrite($datei,"$besucher");
    fclose($datei);


    header('Content-type:application/zip');

    $file fopen($_GET['file'], 'r');
    $x fread($filefilesize($_GET['file']));
    fclose($file);
    echo 
    $x;

    ?>
    Das Ganze funktioniert nur mit Einschränkungen, alle Dateien müssen den gleichen Mime-Type haben (im Beispiel Zip, kannst du natürlich auch ändern, eine Liste der Mime-Types findest du hier.
    Den Download rufst du dann über den Link download.php?file=Dateiname auf (wenn die Php-Datei download.php heißt). Der Counter wird dann in der Datei namens Dateiname_count abgelegt, mit folgendem Php-Code kannst du ihn ausgeben:
    PHP-Code:
    <?php
    $datei 
    fopen($datei fopen("Dateiname_count""r");
    $besucher fread($datei,filesize("Dateiname_count"));
    fclose($datei);
    echo 
    $besucher;
    ?>
    Edit:
    Mir ist gerade noch was aufgefallen: der Dateiname wird nicht geändert, also heißt die runtergeladene Datei immer download.php, aber sons geht's.

  3. #3
    Der Dateiname lässt sich mit einem relativ einfachem Header ändern, der aber AFAIK für IE anders ist als normal:
    PHP-Code:
    if (preg_match('/MSIE [0-9]\.[0-9]{1,2}/'$_SERVER['HTTP_USER_AGENT']))
    {
        
    header('Content-Disposition: inline; filename="'.$_GET['file'].'"');
    } else {
        
    header('Content-Disposition: attachment; filename="'.$_GET['file'].'"');

    Und auf einem Apache lässt sich der MIME-Type AFAIK auch anpassen:
    PHP-Code:
    header('Content-type: '.mime_content_type($_GET['file'])); 

  4. #4
    Ich mach das meist so, dass ich Downloadzähler sowie URL der Datei in einer Datenbank speicher und dann eine download.php?id=X aufrufen lasse, die dann in der Datenbank den Counter der Datei mit der ID X erhöht und dann zu dieser Datei weiterleitet. Eine, die ich neulich geschrieben hab, sieht zum Beispiel so aus:

    PHP-Code:
    <?php if (!isset ($_GET['id']))
    {
        echo (
    'Keine ID angegeben!');
    }
    else
    {
        include (
    'global.php');
        
    $db->query ('SELECT COUNT(`ID`) FROM `bunterabend` WHERE `ID` = '.$_GET['id']);
        if (
    $db->result() == 0)
        {
            echo (
    'Ungültige ID angegeben!');
        }
        else
        {
            
    $db->query ('SELECT `count` FROM `bunterabend` WHERE `ID` = '.$_GET['id']);
            
    $count $db->result();
            
    $count++;
            
    $db->query ('UPDATE `bunterabend` SET `count` = '.$count.' WHERE `ID` = '.$_GET['id']);
            
    $db->query ('SELECT `file` FROM `bunterabend` WHERE `ID` = '.$_GET['id']);
            
    header ('Location: '.$db->result());
            exit();
        }
    ?>
    Dies gibt natürlich auch keine Sicherheit, dass die Datei direkt aufgerufen wird, ohne dass das registriert wird, aber vielleicht noch mehr als mit diesem ?file=datei.zip. Natürlich lässt sich das hier auch irgendwie mit Textdateien verwirklichen, aber mit MySQL ist's wohl deutlich einfacher.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •