Referer-Script optimieren

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Referer-Script optimieren

    Hallo

    ich habe ein Refererscript am laufen und möchte dies etwas optimieren. Allerdings habe nicht all viel Ahnung von PHP.
    Vielleicht könnt ihr mir ja weiterhelfen.
    Das Script liest aus von wo Besucher auf die Seite kommen, gibt diese in eine Datenbank und zeigt diese in einer Liste auf der Seite.
    Das Script wurde bereits etwas abgeändert, so dass man Seiten ausschliessen kann (google....).

    Nun möchte ich folgende Optimierung:

    Es sollen nur Seiten gezählt werden welche von einer Startseite kommen (index.htm index.html index.php index.asp default.htm)
    Die Liste könnte man noch erweitern (welche Startseiten habt ihr?)

    SQL
    Code:
    CREATE TABLE `referers` (
           `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
     
           `website` VARCHAR(255) NOT NULL,
    
           `hits` INT(11) UNSIGNED NOT NULL DEFAULT '0',
    
     
           PRIMARY KEY  (`id`)
    
         )
    mysql_connect.php
    PHP-Code:
    <?php
    DEFINE 
    ('DB_USER''xxx');
    DEFINE ('DB_PASSWORD''xxx');
    DEFINE ('DB_HOST''localhost');
    DEFINE ('DB_NAME''xxx');

    $dbc = @mysql_connect (DB_HOSTDB_USERDB_PASSWORD) OR die ('Could not connect to MySQL: ' mysql_error());

    @
    mysql_select_db (DB_NAME) OR die('Could not select the database: ' mysql_error() ); 
    ?>
    referer.php
    PHP-Code:
    <?php
    require('mysql_connect.php');

    // Find out or base pure referer.
    $ref $_SERVER['HTTP_REFERER'];

    // Split our URL into bits.
    $url explode("/",$ref);

    // Take the 3rd part of the url (the main site)
    $surl $url[2];

    // Check to see if it contains the www. at the begining
    $found ereg('\www.',$surl);

    if (
    $found) {

    $url $surl;

    } else {

    $url 'www.'.$surl;

    }

    $query "SELECT website, hits FROM referers WHERE website = '$url'";
    $result mysql_query($query);
    $num mysql_num_rows($result);

    if (
    $num == 1) {
    $site mysql_fetch_array($resultMYSQL_ASSOC);

    if (
    $site['website'] != 'www.') {

     if (
    $site['website'] != 'www.lustverzeichnis.com/referer') {
     
     

      
    $hits $site['hits'] + 1;
      
    $website $site['website'];
      
      
    $query "UPDATE referers SET hits = $hits WHERE website = '$website'";
      
    $result mysql_query($query);
     
     }
    }

    } else {

    $urls = array(

    // Ausgeschlossenen Seiten
    "www.google.com""google.com",
    "www.yahoo.com""yahoo.com",

    );

     if (!empty(
    $surl) AND ($surl) != in_array($surl$urls)) {
      
    $query "INSERT INTO referers (website, hits) VALUES ('$url', '1')";
      
    $result mysql_query($query);
    }

    }


    ?>
    Einbinden in Seite
    Code:
    <?php
    require('referer/referer.php');
    
    
    
    $query = "SELECT * FROM referers ORDER BY hits DESC LIMIT 20"; // Change the limit to the top XX that you want to show.
    $result = mysql_query($query);
    
    while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    
    echo '
    <table width="300" border="0" bordercolor="#000000" cellpadding="0" cellspacing="0">
    
    <tr>
     <td width="250"><span class="Stil3"><a target="_blank" href="http://'.$row['website'].'">'.$row['website'].'</a></td>  </tr></table>';
     
     
    } 
    ?>

    [COLOR="red"]Geht nicht, gibts nicht...[/COLOR]

  • #2
    Hallo dee,

    nur mal so als Denkanstoß: eine Startseite kann auch so aussehen, wenn du Pech hast:

    http://www.example.com/noflash/de-de/

    Gruß,

    Anja
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Zitat von AmicaNoctis Beitrag anzeigen
      Hallo dee,

      nur mal so als Denkanstoß: eine Startseite kann auch so aussehen, wenn du Pech hast:

      http://www.example.com/noflash/de-de/

      Gruß,

      Anja

      Hmmm aber dann braucht es doch auch einen seitenname.endung?
      Irgendwo in einer Datei müssen ja die Daten drin sein.

      Kommentar


      • #4
        Zitat von dee73 Beitrag anzeigen
        Hmmm aber dann braucht es doch auch einen seitenname.endung?
        Irgendwo in einer Datei müssen ja die Daten drin sein.
        Nicht wenn sie von einer Startseite kommen. Da steht im Referer dann nur www.example.com. Mehr nicht. Gilt auch für Subdomains und Unterverzeichnisse.

        Peter
        Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
        Meine Seite

        Kommentar


        • #5
          Zitat von dee73 Beitrag anzeigen
          Hmmm aber dann braucht es doch auch einen seitenname.endung?
          Nein, braucht es nicht.
          Irgendwo in einer Datei müssen ja die Daten drin sein.
          URLs müssen keinerlei Bezug zum Dateisystem aufweisen.
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            Zitat von Kropff Beitrag anzeigen
            Nicht wenn sie von einer Startseite kommen. Da steht im Referer dann nur Example Web Page. Mehr nicht. Gilt auch für Subdomains und Unterverzeichnisse.
            Das stimmt so nicht ganz. Im Refer(r)er steht immer die komplette URL, inkl. Schema, Host, (Port,) Pfad und Parameter.
            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
            Super, danke!
            [/COLOR]

            Kommentar


            • #7
              Irgendiwe versteh ich nun Bahnhof.

              Die Leute wollen dass sie auf meiner Topliste erscheinen. Dann müssen sie doch einen Banner oder Textlink irgendwo einbauen - Eine Datei mit Endung.
              Hmmmmmmmm da merk ich grad bei Joomla ist es auch nicht ganz so. Da hat es i Prinzip nur eine index.php...


              Zudem kann ich die Regeln selber bestimmen und sagen: die Banner müsen auf einer index.htm,php,html,start.htm.... sein um gezählt zu werden.

              Kommentar


              • #8
                Hallo dee,

                in vielen Fällen ist es eine Datei, in die jemand den Bannerquellcode einfügt, also nehmen wir das einfach mal an. Ich baue jetzt also deinen Banner auf meiner Seite ein und packe ihn in die
                /home/AmicaNoctis/htdocs/index.php
                damit er auf
                http://amica.example.com/index.php
                erscheint.

                Jetzt ruf ich den Henning an und sag ihm, er soll mal auf meine Seite gehen und kräftig Banner hämmern, damit ich Punkte krieg. Er schreibt in seine Adresszeile
                amica.example.com
                und drückt ENTER. Der Browser macht daraus dann noch
                http://amica.example.com/
                und lädt die Seite mit dem Banner, aber trotz Hennings vieler Klicks bekomme ich keinen einzigen Punkt.

                Woran liegt es? Daran, dass kein Mensch weiß, ob deine Startseite nun eine index.html, eine index.htm, eine start.php oder sonstwas ist und es daher auch nicht eingibt. Die Verzeichnisschreibweise reicht völlig aus und der Server entscheidet dann auf Basis seiner Konfiguration, ob er eine index-Datei ausliefern kann und welche es sein soll.

                Da dieser Dateiname aber nur intern wichtig ist, wird er auch nicht nachträglich in die Adresszeile geschrieben (im Gegensatz zu dem http://) und was nicht in der Adresszeile steht, taucht auch nicht im Referer-Header der nächsten Seite auf.

                Dann bin ich also stinkig auf dich, weil ich keine Punkte bekommen hab und will dich deshalb mal so richtig ärgern. Dazu baue ich eine total blödsinnige und versteckte Unterseite
                /home/AmicaNoctis/htdocs/3df347ea652bb934ce/index.php
                mit deinem Banner und schicke den Link
                http://amica.example.com/3df347ea652bb934ce/index.php
                an alle Kontakte in meinem Adressbuch.

                Wenn die den Link aufrufen, steht die index.php explizit in der Adresszeile, weil ich es ja so geschickt hab und damit auch im Referer-Header. Die Bedingungen sind erfüllt, du denkst, es ist ne Startseite und gibst mir schön die Punkte, obwohl außer den paar Kontakten niemand je was von der Seite mit deinem Banner erfahren wird.

                Das war das einfachste Szenario!


                Jetzt könnte noch mod_rewrite ins Spiel kommen. Das wird gerne benutzt, um "sprechende" URLs zu erzeugen oder zwischen einer alten und einer neuen Site-Struktur zu mappen. Auch dabei wirst du in den seltensten Fällen einen Dateinamen wie index.php sehen, sondern meist nur Verzeichnisse.

                Dann gibt es noch CMSs, die auch nicht unbedingt solche URLs erzeugen müssen, wie du gerne hättest.


                Kurz gesagt, du kannst anhand des Referer-Headers nicht ermitteln, ob das eine Startseite oder eine Unterseite war, aber das hab ich dir ja schon eher geschrieben.

                Viel Spaß mit deinen Bannern und vielleicht hast du ja mal Zeit, dich mit der Funktionsweise des WWW und der Kommunikation zwischen Client und Server näher zu beschäftigen.

                Gruß,

                Anja
                [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                Super, danke!
                [/COLOR]

                Kommentar


                • #9

                  Dann bin ich also stinkig auf dich, weil ich keine Punkte bekommen hab und will dich deshalb mal so richtig ärgern. Dazu baue ich eine total blödsinnige und versteckte Unterseite
                  /home/AmicaNoctis/htdocs/3df347ea652bb934ce/index.php
                  mit deinem Banner und schicke den Link
                  http://amica.example.com/3df347ea652bb934ce/index.php
                  an alle Kontakte in meinem Adressbuch.

                  Wenn die den Link aufrufen, steht die index.php explizit in der Adresszeile, weil ich es ja so geschickt hab und damit auch im Referer-Header. Die Bedingungen sind erfüllt, du denkst, es ist ne Startseite und gibst mir schön die Punkte, obwohl außer den paar Kontakten niemand je was von der Seite mit deinem Banner erfahren wird.
                  Hallo Anja. Dieses Szenario könnte er ja auch so machen ohne das ich das Script nun abändere. Ich glaube halt noch an die "Guten Menschen" die für Erfolg nicht zu bescheissen brauchen.
                  Die Einträge in den Top20 die ich habe werden natürlich ab und zu kontrolliert und wenn mir was auffällt werden die Domains einfach gesperrt.
                  Das das System nicht 100% zuverlässig ist und auch nie werden wird ist mir schon klar, da man sich ja auch nicht anmelden muss.
                  Das Script hat zudem einen kleinen Fehler drin: Klickt man auf seiner Seite einen Banner auf meine Seite und aktualisiert den Browser ein paar mal dann steigt auch die Ranghöhe.

                  Also fakt ist dass das System nicht ideal ist und logischerweise manipulierbar.
                  Kontrollieren muss ich es jetzt schon und werde ich weiterhin müssen.

                  Allerdings machen wir auch viel Werbung auf Inseratenseiten. Diese werden dann aber schnell mal weit oben gelistet. Klar kann ich diese Domains auch einfach sperren. Das Problem ist nun aber folgendes:
                  Wenn diese Inserateseite mich nun mit einem Banner auf seiner indexseite aufnimmt, würde er nie bei mir in der Topliste erscheinen, da ich ihn ja gesperrt habe.
                  Deswegen möchte ich diese Funktion in das Script einbauen und hoffe nun auf ein paar konkrete Vorschläge...


                  Danke

                  Kommentar


                  • #10
                    Zitat von dee73 Beitrag anzeigen
                    Ich glaube halt noch an die "Guten Menschen" die für Erfolg nicht zu bescheissen brauchen.
                    Warum dann diese Restriktion?

                    Zitat von dee73 Beitrag anzeigen
                    Das Script hat zudem einen kleinen Fehler drin: Klickt man auf seiner Seite einen Banner auf meine Seite und aktualisiert den Browser ein paar mal dann steigt auch die Ranghöhe.
                    Das wäre aus meiner Sicht die wichtigere Baustelle.

                    Zitat von dee73 Beitrag anzeigen
                    Deswegen möchte ich diese Funktion in das Script einbauen und hoffe nun auf ein paar konkrete Vorschläge...
                    Wie sollen denn konkrete Vorschläge kommen, wenn es nicht machbar ist? Das versuche ich dir ja die ganze Zeit klar zu machen.
                    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                    Super, danke!
                    [/COLOR]

                    Kommentar


                    • #11
                      Zitat von AmicaNoctis Beitrag anzeigen
                      Warum dann diese Restriktion?
                      Deswegen:
                      Allerdings machen wir auch viel Werbung auf Inseratenseiten. Diese werden dann aber schnell mal weit oben gelistet. Klar kann ich diese Domains auch einfach sperren. Das Problem ist nun aber folgendes:
                      Wenn diese Inserateseite mich nun mit einem Banner auf seiner indexseite aufnimmt, würde er nie bei mir in der Topliste erscheinen, da ich ihn ja gesperrt habe.


                      Das es nicht machbar ist, kan ich nicht glauben. Genauso wie ich Domains sperren kann, kann ich bestimmt irgendwie sagen, dass nur links aus bestimmten Dateien in die Datenbank reinkommen sollen.

                      Kommentar


                      • #12
                        Zitat von dee73 Beitrag anzeigen
                        Das es nicht machbar ist, kan ich nicht glauben. Genauso wie ich Domains sperren kann, kann ich bestimmt irgendwie sagen, dass nur links aus bestimmten Dateien in die Datenbank reinkommen sollen.
                        Ich kann dich natürlich nicht zwingen, das zu glauben. Natürlich kannst du bestimmen, dass nur bestimmte Dateien in die Datenbank kommen, aber diese Dateinamen müssen nicht zwingend im Referer-Header stehen. Die http://www.example.com/pfad/zu/einer/index.html kann auch als http://www.example.com/pfad/zu/einer/ ankommen, dann hast du einfach keinen Dateinamen.

                        Oder ist dir das klar und wir reden aneinander vorbei?
                        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                        Super, danke!
                        [/COLOR]

                        Kommentar


                        • #13
                          ja ist mittlerweile schon klar. Würde dies auch so kommunizieren auf der Seite. Klar ist auch dass dan nicht jede Seite mitmachen kann. Dann macht er halt keinen Link zu uns.
                          Dafür habe ich etwas weniger Arbeit mit Domains sperren, die dann irgendwann vielleicht einen Link setzen und sich ärgern.

                          Kommentar


                          • #14
                            Zitat von dee73 Beitrag anzeigen
                            Klar ist auch dass dan nicht jede Seite mitmachen kann. Dann macht er halt keinen Link zu uns.
                            Wenn du das in Kauf nimmst, dann lass doch nur URLs zu, die einen leeren Pfad haben, also http://www.example.com/
                            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                            Super, danke!
                            [/COLOR]

                            Kommentar


                            • #15
                              ja wenn das einfacher ist? Hab trotzdem keine Ahnung wie ich das bewerkstelligen könnte ;-)

                              Kommentar

                              Lädt...
                              X