Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

First Click Free - PHP Schnipsel :D funktioniert nicht?!

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
JohnBi
PostRank 10
PostRank 10
Beiträge: 2957
Registriert: 22.02.2009, 20:31

Beitrag von JohnBi » 25.02.2009, 20:49

vielen Dank - es funktioniert ... :D
Probleme mit Google & Co.? Hier die Lösung! - Linktausch?! | Projekt kaufen?! |
-------------------------------------------
Der PostRank und das Anmeldedatum stehen in keinem Verhältnis zur Qualität der Antworten einiger User. {JohnBi, 2009}

Anzeige von ABAKUS

von Anzeige von ABAKUS »

SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


webpilot
PostRank 6
PostRank 6
Beiträge: 417
Registriert: 24.03.2007, 17:03

Beitrag von webpilot » 25.02.2009, 20:52

Ist das nur ein Codeausschnitt? Verstehe irgendwie nur Bahnhof... :(

JohnBi
PostRank 10
PostRank 10
Beiträge: 2957
Registriert: 22.02.2009, 20:31

Beitrag von JohnBi » 26.02.2009, 08:15

jo, ist nur ein Code Schnispel - aber eben der wesentliche um First Click Free in seinem eigenem Code zu implementieren...
Probleme mit Google & Co.? Hier die Lösung! - Linktausch?! | Projekt kaufen?! |
-------------------------------------------
Der PostRank und das Anmeldedatum stehen in keinem Verhältnis zur Qualität der Antworten einiger User. {JohnBi, 2009}

mgutt
PostRank 10
PostRank 10
Beiträge: 3206
Registriert: 08.03.2005, 13:13

Beitrag von mgutt » 15.03.2009, 16:34

Code: Alles auswählen

<?
function isGoogleClick&#40;&#41; &#123;
    if&#40;stripos&#40;$_SERVER&#91;'HTTP_REFERER'&#93;, '.google.'&#41; !== false &&
        preg_match&#40;'&#123;^&#91;a-z&#93;+&#58;//&#91;^.&#93;*\.google\.&#125;i’, $_SERVER&#91;‘HTTP_REFERER’&#93;&#41;&#41;
            return true;
    if&#40;stripos&#40;$_SERVER&#91;‘HTTP_USER_AGENT’&#93;, ‘Googlebot’&#41; !== false&#41; &#123;
        $host = gethostbyaddr&#40;$_SERVER&#91;'REMOTE_ADDR'&#93;&#41;; 
        if&#40;stripos&#40;$host, 'googlebot'&#41; !== false&#41; return true; 
    &#125;
    return false; 
&#125;
$google=isGoogleClick&#40;&#41;;
echo $google;
?>
Ich kann diese Funktion nicht empfehlen, weil sie performancelastig ist und im Härtefall dazu führt, dass die Seite nicht geladen wird.

gethostbyaddr() sendet die IP an den DNS und gibt dann das Ergebnis aus. Wenn der DNS temporär nicht zu erreichen ist oder die IP nicht im DNS gefunden wird, kann es dazu führen, dass die Seite unendlich lange lädt oder zumindest 20-30 Sekunden braucht.

Der Rest ist eigentlich auch vergebene Lebensmüh. Wenn der Ref ".google." enthält, reicht das vollkommen aus. Da noch ein preg_match() einzusetzen, bläht den Code nur unnötig auf.

Wenn Du den USER_AGENT voraussetzt, dann bleib einfach dabei. Wenn sich jemand die Mühe macht und den fälscht, sich also als Googlebot ausgibt, dann kann er sich auch gleich die Mühe machen und den Referer fälschen. Also lass gethostbyaddr() gleich weg.

Ich schlage folgendes vor:

Code: Alles auswählen

<?php
// functions
function is_bot&#40;&#41; &#123;
	if &#40;
		strpos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'bot'&#41; !== false ||
		strpos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'Bot'&#41; !== false ||
		strpos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'crawl'&#41; !== false ||
		strpos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'Crawl'&#41; !== false ||
		strpos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'search'&#41; !== false ||
		strpos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'get'&#41; !== false ||
		strpos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'spider'&#41; !== false ||
		strpos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'find'&#41; !== false ||
		strpos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'java'&#41; !== false ||
		strpos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'Java'&#41; !== false ||
		strpos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'Google'&#41; !== false ||
		strpos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'yahoo'&#41; !== false ||
		strpos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'ask'&#41; !== false ||
		strpos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'contaxe'&#41; !== false ||
		strpos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'Yandex'&#41; !== false ||
		strpos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'libwww-perl'&#41; !== false ||
	&#41; &#123;
		return true;
	&#125;
	return false;
&#125;
function is_view_allowed&#40;&#41; &#123;
	if &#40;isset&#40;$_SERVER&#91;'HTTP_REFERER'&#93;&#41; && strpos&#40;$_SERVER&#91;'HTTP_REFERER'&#93;, '.google.'&#41; !== false&#41; &#123;
		return true;
	&#125;
	else if &#40;is_bot&#40;&#41;&#41; &#123;
		return true;
	&#125;
	return false;
&#125;
// check auth
if &#40;!is_view_allowed&#40;&#41;&#41; &#123;
	exit&#40;'Normaler Besucher ohne Google-Referer.'&#41;;
&#125;
?>
Die Bots, die Du nicht zulassen willst, kannst Du ja einfach entfernen.

Beachte, dass das "search" z.B. Yahoo abdeckt, mit ihrem USER_AGENT:

Code: Alles auswählen

Mozilla/5.0 &#40;compatible; Yahoo! Slurp; http&#58;//help.yahoo.com/help/us/ysearch/slurp&#41;
"Crawl" deckt dagegen z.B. den Ebay Relevance Ad ab. Und natürlich viele andere Bots, werden mit "bot" erkannt. Um so maginaler der Filter aufgebaut ist, umso schneller ist er, daher sollte man sich nur auf die prägnanten Keys konzentrieren.

is_bot() habe ich auf Grund eines Benchmarks in PHP4 herauskristalisiert (=is_bot5()). Hier die Funktionen, die ich dabei getestet hatte:

Code: Alles auswählen

//main functions
if &#40;!function_exists&#40;'stripos'&#41;&#41; &#123;
	function stripos&#40;$haystack, $needle, $offset=0&#41; &#123;
		return strpos&#40;strtolower&#40;$haystack&#41;, strtolower&#40;$needle&#41;, $offset&#41;;
	&#125;
&#125;
function stripos2&#40;$haystack, $needle, $offset=0&#41; &#123;
	return strpos&#40;strtolower&#40;$haystack&#41;, $needle, $offset&#41;;
&#125;
// test functions
function is_bot1&#40;&#41; &#123; // 0.70
	if&#40;preg_match&#40;'#&#40;bot|crawl|search|get|spider|find|java|google|yahoo|ask|contaxe|yandex&#41;#', $_SERVER&#91;'HTTP_USER_AGENT'&#93;&#41;&#41; &#123;
		return true;
	&#125;
	return false;
&#125;
function is_bot2&#40;&#41; &#123; // 1.27
	foreach &#40;array&#40;'bot', 'crawl', 'search', 'get', 'spider', 'find', 'java', 'google', 'yahoo', 'ask', 'contaxe', 'yandex'&#41; as $bot&#41; &#123;
		if &#40;stripos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, $bot&#41; !== false&#41; &#123;
			return true;
		&#125;
	&#125;
	return false;
&#125;
function is_bot3&#40;&#41; &#123; // 1.13
	if &#40;
		stripos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'bot'&#41; !== false ||
		stripos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'crawl'&#41; !== false ||
		stripos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'search'&#41; !== false ||
		stripos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'get'&#41; !== false ||
		stripos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'spider'&#41; !== false ||
		stripos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'find'&#41; !== false ||
		stripos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'java'&#41; !== false ||
		stripos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'google'&#41; !== false ||
		stripos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'yahoo'&#41; !== false ||
		stripos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'ask'&#41; !== false ||
		stripos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'contaxe'&#41; !== false ||
		stripos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'yandex'&#41; !== false
	&#41; &#123;
		return true;
	&#125;
	return false;
&#125;
function is_bot4&#40;&#41; &#123; // 0.53
	foreach &#40;array&#40;'bot', 'crawl', 'search', 'get', 'spider', 'find', 'java', 'google', 'yahoo', 'ask', 'contaxe', 'yandex'&#41; as $bot&#41; &#123;
		if &#40;strpos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, $bot&#41; !== false&#41; &#123;
			return true;
		&#125;
	&#125;
	return false;
&#125;
function is_bot5&#40;&#41; &#123; // 0.34
	if &#40;
		strpos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'bot'&#41; !== false ||
		strpos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'Bot'&#41; !== false ||
		strpos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'crawl'&#41; !== false ||
		strpos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'Crawl'&#41; !== false ||
		strpos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'search'&#41; !== false ||
		strpos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'get'&#41; !== false ||
		strpos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'spider'&#41; !== false ||
		strpos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'find'&#41; !== false ||
		strpos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'java'&#41; !== false ||
		strpos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'Java'&#41; !== false ||
		strpos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'Google'&#41; !== false ||
		strpos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'yahoo'&#41; !== false ||
		strpos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'ask'&#41; !== false ||
		strpos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'contaxe'&#41; !== false ||
		strpos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'Yandex'&#41; !== false
	&#41; &#123;
		return true;
	&#125;
	return false;
&#125;
function is_bot6&#40;&#41; &#123; // 0.84
	if&#40;preg_match&#40;'#&#40;bot|Bot|crawl|Crawl|search|get|spider|find|java|Java|Google|yahoo|ask|contaxe|Yandex&#41;#', $_SERVER&#91;'HTTP_USER_AGENT'&#93;&#41;&#41; &#123;
		return true;
	&#125;
	return false;
&#125;
function is_bot7&#40;&#41; &#123; // 0.43
	if &#40;
		strpos&#40;strtolower&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;&#41;, 'bot'&#41; !== false ||
		strpos&#40;strtolower&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;&#41;, 'crawl'&#41; !== false ||
		strpos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'search'&#41; !== false ||
		strpos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'get'&#41; !== false ||
		strpos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'spider'&#41; !== false ||
		strpos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'find'&#41; !== false ||
		strpos&#40;strtolower&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;&#41;, 'java'&#41; !== false ||
		strpos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'Google'&#41; !== false ||
		strpos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'yahoo'&#41; !== false ||
		strpos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'ask'&#41; !== false ||
		strpos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'contaxe'&#41; !== false ||
		strpos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'Yandex'&#41; !== false
	&#41; &#123;
		return true;
	&#125;
	return false;
&#125;
function is_bot8&#40;&#41; &#123; // 1.10
	if &#40;
		stripos2&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'bot'&#41; !== false ||
		stripos2&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'crawl'&#41; !== false ||
		stripos2&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'search'&#41; !== false ||
		stripos2&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'get'&#41; !== false ||
		stripos2&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'spider'&#41; !== false ||
		stripos2&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'find'&#41; !== false ||
		stripos2&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'java'&#41; !== false ||
		stripos2&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'google'&#41; !== false ||
		stripos2&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'yahoo'&#41; !== false ||
		stripos2&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'ask'&#41; !== false ||
		stripos2&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'contaxe'&#41; !== false ||
		stripos2&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'yandex'&#41; !== false
	&#41; &#123;
		return true;
	&#125;
	return false;
&#125;
In PHP5 ist is_bot3() vermutlich die schnellere Alternative. Konnte ich aber nicht testen.
Ich kaufe Dein Forum!
Kontaktdaten

JohnBi
PostRank 10
PostRank 10
Beiträge: 2957
Registriert: 22.02.2009, 20:31

Beitrag von JohnBi » 15.03.2009, 16:55

Deine Alternative ist Cloaking und das geht 100% in die Hose.

Es geht bei dem Code daoben nicht über den Referer zu gehen, sondern über die IP und wenn dann in der Rückführung über die IP "google" im User-Agent steht dann geht das in Ordnung.
Probleme mit Google & Co.? Hier die Lösung! - Linktausch?! | Projekt kaufen?! |
-------------------------------------------
Der PostRank und das Anmeldedatum stehen in keinem Verhältnis zur Qualität der Antworten einiger User. {JohnBi, 2009}

mgutt
PostRank 10
PostRank 10
Beiträge: 3206
Registriert: 08.03.2005, 13:13

Beitrag von mgutt » 15.03.2009, 17:10

Unsere beiden Funktion unterscheiden sich nicht außer, dass meine schneller ist.

Du prüfst wie ich erst ob der Ref google enthält und wenn nicht prüfst Du ob google selbst zu Besuch gekommen ist. Genau das gleiche macht meine Funktion auch, nur dass sie zusätzlich mehrere Bots zulässt, statt jetzt nur Google.
Zuletzt geändert von mgutt am 15.03.2009, 17:19, insgesamt 2-mal geändert.
Ich kaufe Dein Forum!
Kontaktdaten

JohnBi
PostRank 10
PostRank 10
Beiträge: 2957
Registriert: 22.02.2009, 20:31

Beitrag von JohnBi » 15.03.2009, 17:14

Ok, das mag sein, da mich aber andere Suchmaschinen nicht interessieren ist der Code optimal für mich .
Probleme mit Google & Co.? Hier die Lösung! - Linktausch?! | Projekt kaufen?! |
-------------------------------------------
Der PostRank und das Anmeldedatum stehen in keinem Verhältnis zur Qualität der Antworten einiger User. {JohnBi, 2009}

mgutt
PostRank 10
PostRank 10
Beiträge: 3206
Registriert: 08.03.2005, 13:13

Beitrag von mgutt » 15.03.2009, 17:19

JohnBi hat geschrieben:Ok, das mag sein, da mich aber andere Suchmaschinen nicht interessieren ist der Code optimal für mich .
Nein ist er nicht. Denn mein Code ist trotz der Erkennung von verschiedenen Suchmaschinen viel schneller als Deiner. Und selbst wenn Du nur Google zulassen wolltest, könntest Du die Funktion einfach auf das reduzieren:

Code: Alles auswählen

<?php 
// functions 
function is_bot&#40;&#41; &#123; 
   if &#40; 
      strpos&#40;$_SERVER&#91;'HTTP_USER_AGENT'&#93;, 'Google'&#41; !== false
   &#41; &#123; 
      return true; 
   &#125; 
   return false; 
&#125; 
function is_view_allowed&#40;&#41; &#123; 
   if &#40;isset&#40;$_SERVER&#91;'HTTP_REFERER'&#93;&#41; && strpos&#40;$_SERVER&#91;'HTTP_REFERER'&#93;, '.google.'&#41; !== false&#41; &#123; 
      return true; 
   &#125; 
   else if &#40;is_bot&#40;&#41;&#41; &#123; 
      return true; 
   &#125; 
   return false; 
&#125; 
// check auth 
if &#40;!is_view_allowed&#40;&#41;&#41; &#123; 
   exit&#40;'Normaler Besucher ohne Google-Referer.'&#41;; 
&#125; 
?>
Du verifizierst zusätzlich zum vermeintlich erkannten Googlebot im USER_AGENT, die Echtheit der IP. Das ist vergebene Lebensmüh, denn der Besucher könnte statt dem HTTP_USER_AGENT, einfach den HTTP_REFERER fälschen, um Deine Seite komplett einsehen zu können.

Für Deinen Server heißt das, dass bei JEDEM Zugriff eines Googlebots ein gethostbyaddr() ausgeführt wird. Damit belastest Du Deinen Server und die Antwortzeit, also die Ladezeiten werden damit negativ beeinflusst. Natürlich nur für Google, aber Google ist ja bekannterweise äußerst aktiv mit ihren Crawlern.

Wenn Du eine Verifizierung möchtest, kann ich Dir gleich mal einen Code liefern, der das besser löst.
Ich kaufe Dein Forum!
Kontaktdaten

JohnBi
PostRank 10
PostRank 10
Beiträge: 2957
Registriert: 22.02.2009, 20:31

Beitrag von JohnBi » 15.03.2009, 17:24

Wie gesagt ich bin kein Profi der Programmierung, ich hab bissel was drauf aber man kann ja nicht alles beherrschen, sonst wäre ich Leonardo Da Vinci ... ich weiss von dem Code den ich nutze das er 100% Google-Konform ist - bei deinem wüsste ich das nicht und deswegen spar dir die Mühe da muss der Server eben rackern und wenn ich bemerke das es einfach überhand nimmt, wäre ich froh wenn ich dich dann nochmal kontaktieren dürfte.
Probleme mit Google & Co.? Hier die Lösung! - Linktausch?! | Projekt kaufen?! |
-------------------------------------------
Der PostRank und das Anmeldedatum stehen in keinem Verhältnis zur Qualität der Antworten einiger User. {JohnBi, 2009}

mgutt
PostRank 10
PostRank 10
Beiträge: 3206
Registriert: 08.03.2005, 13:13

Beitrag von mgutt » 15.03.2009, 17:52

Hi,

ich progge nur noch für mich bzw. veröffentliche zwischendurch mal ein paar nützliche Sache, die ich selber im Einsatz habe.

Ich habe das mal so umgesetzt, dass es auch den Host verifiziert:
https://www.programmierer-forum.de/firs ... t91652.htm

Funktioniert aktuell nur für Google und Yahoo.

Übrigens erkennt Dein Script nur den Googlebot. Falls Du also später Adsense oder sowas integrierst, musst Du es auf jeden Fall anpassen. Ansonsten kann kein anderer Bot auf die Seite zugreifen.

Gruß
Ich kaufe Dein Forum!
Kontaktdaten

JohnBi
PostRank 10
PostRank 10
Beiträge: 2957
Registriert: 22.02.2009, 20:31

Beitrag von JohnBi » 15.03.2009, 18:02

Jo, für Adsense gibts noch AdSense für geschützte Bereiche, da kriegt der AdSense Bot nen Account von mir gestellt ...

Auf jedenfall, vielen Dank für deine Hilfe und deine Ratschläge, wahrscheinlich werde ich jedoch irgendwann doch deine Realisierung umsetzen, aber im Moment tut es diese.
Probleme mit Google & Co.? Hier die Lösung! - Linktausch?! | Projekt kaufen?! |
-------------------------------------------
Der PostRank und das Anmeldedatum stehen in keinem Verhältnis zur Qualität der Antworten einiger User. {JohnBi, 2009}

Antworten
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag