PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   PHP Developer Forum (https://www.php-resource.de/forum/php-developer-forum/)
-   -   Referer-Script optimieren (https://www.php-resource.de/forum/php-developer-forum/97284-referer-script-optimieren.html)

dee73 14-08-2009 21:33

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>';
 
 
}
?>


Geht nicht, gibts nicht...

AmicaNoctis 14-08-2009 21:44

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

dee73 14-08-2009 22:17

Zitat:

Zitat von AmicaNoctis (Beitrag 623126)
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.

Kropff 14-08-2009 22:22

Zitat:

Zitat von dee73 (Beitrag 623133)
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

wahsaga 14-08-2009 22:24

Zitat:

Zitat von dee73 (Beitrag 623133)
Hmmm aber dann braucht es doch auch einen seitenname.endung?

Nein, braucht es nicht.
Zitat:

Irgendwo in einer Datei müssen ja die Daten drin sein.
URLs müssen keinerlei Bezug zum Dateisystem aufweisen.

AmicaNoctis 14-08-2009 23:25

Zitat:

Zitat von Kropff (Beitrag 623135)
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.

dee73 15-08-2009 07:07

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.

AmicaNoctis 15-08-2009 13:03

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

dee73 15-08-2009 14:00

Zitat:


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

AmicaNoctis 15-08-2009 14:12

Zitat:

Zitat von dee73 (Beitrag 623158)
Ich glaube halt noch an die "Guten Menschen" die für Erfolg nicht zu bescheissen brauchen.

Warum dann diese Restriktion?

Zitat:

Zitat von dee73 (Beitrag 623158)
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:

Zitat von dee73 (Beitrag 623158)
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.

dee73 15-08-2009 14:21

Zitat:

Zitat von AmicaNoctis (Beitrag 623160)
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.

AmicaNoctis 15-08-2009 14:31

Zitat:

Zitat von dee73 (Beitrag 623163)
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?

dee73 15-08-2009 14:37

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.

AmicaNoctis 15-08-2009 14:43

Zitat:

Zitat von dee73 (Beitrag 623166)
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/

dee73 15-08-2009 14:58

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


Alle Zeitangaben in WEZ +2. Es ist jetzt 01:50 Uhr.

Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG