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

Ergebnis in txt Datei schreiben

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
S0l0ng
PostRank 5
PostRank 5
Beiträge: 258
Registriert: 06.11.2008, 08:55

Beitrag von S0l0ng » 20.03.2011, 09:16

Guten Morgen Leute,

ich habe folgendes Problem. Ich habe einen PHP Codeschnipsel (den ich etwas modifiziert habe) der mit erlaubt Benutzer die von einer Suchmaschine kommen gleich per Link auf die gesuchten Wörter in der internen Seitensuche hinzuweisen:
<?php
function referer2keyword($default=null, $referer = null){
$default = "none";
if (is_null($referer)) {
$referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
}

// Dies sind die am häufigsten verwendeten Variablen von Suchmaschinen
$array = array('q','query','search','p');
$count = count($array);
for($i=0; $i<$count; $i++) {
$var = parse_url($referer);
parse_str($var['query'], $output);
if($output[$array[$i]] != null) {
return $output[$array[$i]];
}
}
if (is_null($output["prev"])) {
return $default; //Optionale Ausgabe eines Standard-Keywords
} else {
// Dies sind die am häufigsten verwendeten Variablen von Suchmaschinen zzgl. google-images-Anpassung
$array = array('q','query','search','p','/images?q');
$count = count($array);
$dummy =$output["prev"];
for($i=0; $i<$count; $i++) {
parse_str($dummy, $output2);
if($output2[$array[$i]] != null) {
return $output2[$array[$i]];
}
}
}
}

// normaler Einsatz
if (referer2keyword() != "none"){
echo( "<a href=\"https://www.crawl-it.de/crawlit/registr ... &p_search=" . urlencode(referer2keyword() ) . "\"target=\"self\"\"\"style=\"text-decoration: none\">Deine Suchergebnisse zu " . urlencode(referer2keyword() ) . "</a> | ");
}


?>
Ich würde jetzt gerne das Ergebnis (also die Suchwörter) zusätzlich in eine txt Datei schreiben lassen (am besten sogar ohne die"+" zwischen den Suchwörtern) bekomme das aber nicht auf die Reihe. Irgenwie findet man zu dem Thema auch rein gar nichts im Internet (nur Referrer auslesen - aber Suchwörter aus Referrer auslesen und in txt Datei schreiben...nüscht)

Habt ihr noch den allesentscheidenden Tip für mich?
Contaxe, die Alternative zum Geldverdienen mit Foren!

Anzeige von ABAKUS

von Anzeige von ABAKUS »

Content Erstellung von ABAKUS Internet Marketing
Ihre Vorteile:
  • einzigartige Texte
  • suchmaschinenoptimierte Inhalte
  • eine sinnvolle Content-Strategie
  • Beratung und Umsetzung
Jetzt anfragen: 0511 / 300325-0

Loptr
PostRank 7
PostRank 7
Beiträge: 593
Registriert: 07.08.2007, 11:13
Wohnort: Freiburg

Beitrag von Loptr » 20.03.2011, 09:59


S0l0ng
PostRank 5
PostRank 5
Beiträge: 258
Registriert: 06.11.2008, 08:55

Beitrag von S0l0ng » 20.03.2011, 10:16

ja das hatte ich auch schonmal gefunden. Ich hänge daran das ich ihm sage das er das Ergebnis des oberen codes

Code: Alles auswählen

" . urlencode&#40;referer2keyword&#40;&#41; &#41; . " ??
in die Datei schreiben soll.

Das es jetzt mit

Code: Alles auswählen

$somecontent = " . urlencode&#40;referer2keyword&#40;&#41; &#41; . ";
nicht getan ist weiß ich sogar mit meinem kaum vorhandenen php wissen :D
Contaxe, die Alternative zum Geldverdienen mit Foren!

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.


Melegrian
PostRank 10
PostRank 10
Beiträge: 3170
Registriert: 30.01.2005, 12:36

Beitrag von Melegrian » 20.03.2011, 15:02

Wird denn urlencode(referer2keyword()) richtig gefüllt und ausgegeben? Wenn ja, so brauchst Du den Wert doch nur noch in eine txt zu schreiben. Oder? Der Eintrag erfolgt ohnehin zeilenweise, wobei eine Zeile sich so schreiben lassen würde:

Code: Alles auswählen

$datei = "datei.txt";
$somecontent = urlencode&#40;referer2keyword&#40;&#41;&#41;;

file_put_contents&#40;$datei, $somecontent&#41;;
Ansonsten so:

Code: Alles auswählen

$datei = "datei.txt";
$somecontent = urlencode&#40;referer2keyword&#40;&#41;&#41;."\n";

$handle = fopen&#40;$datei,"a"&#41;;
fputs&#40;$handle,$somecontent&#41;;
fclose&#40;$handle&#41;;
CHMOD nicht vergessen, falls erforderlich.

S0l0ng
PostRank 5
PostRank 5
Beiträge: 258
Registriert: 06.11.2008, 08:55

Beitrag von S0l0ng » 20.03.2011, 15:49

Melegrian hat geschrieben:
Ansonsten so:

Code: Alles auswählen

$datei = "datei.txt";
$somecontent = urlencode&#40;referer2keyword&#40;&#41;&#41;."\n";

$handle = fopen&#40;$datei,"a"&#41;;
fputs&#40;$handle,$somecontent&#41;;
fclose&#40;$handle&#41;;
CHMOD nicht vergessen, falls erforderlich.
Danke Melegrian,

so hat es jetzt geklappt! :D
Contaxe, die Alternative zum Geldverdienen mit Foren!

S0l0ng
PostRank 5
PostRank 5
Beiträge: 258
Registriert: 06.11.2008, 08:55

Beitrag von S0l0ng » 20.03.2011, 18:40

ok ein kleines Problem gibt es dann doch noch:

Wenn ich jetzt eine der Seiten über die Google Suche ansurfe funktioniert der Schnipsel einwandfrei. Wenn ich aber von einer Seite zur Anderen gehe (also ohne Google Suchanfrage) wirft er anstelle der Referrer Keys folgendes aus:

Code: Alles auswählen

Undefined variable&#58; query
Sollte er in dem Fall nicht einfach gar nichts ausgeben? Kann ich irgendwie für den Fall das ein Beuscher nicht von einer Suchmaschine kommt einen Alternativtext an der Stelle ausgeben?
Contaxe, die Alternative zum Geldverdienen mit Foren!

Melegrian
PostRank 10
PostRank 10
Beiträge: 3170
Registriert: 30.01.2005, 12:36

Beitrag von Melegrian » 21.03.2011, 01:02

Bei mir wird diese Meldung nicht angezeigt. Nachfolgend ist nur ein Notbehelf, gibt sicherlich elegantere Lösungen, sollte aber funktionieren. Wobei deine-domain.de gegen Deine Domain auszutauschen ist. Ist aber ungetestet.

Code: Alles auswählen

<?php

function referer2keyword&#40;$default=null, $referer = null&#41;&#123;$default = "none";

if &#40;is_null&#40;$referer&#41;&#41; &#123;$referer = isset&#40;$_SERVER&#91;'HTTP_REFERER'&#93;&#41; ? $_SERVER&#91;'HTTP_REFERER'&#93; &#58; '';
&#125;

$array = array&#40;'q','query','search','p'&#41;;
$count = count&#40;$array&#41;;

for&#40;$i=0; $i<$count; $i++&#41; &#123;
$var = parse_url&#40;$referer&#41;;
parse_str&#40;$var&#91;'query'&#93;, $output&#41;;
if&#40;$output&#91;$array&#91;$i&#93;&#93; != null&#41; &#123;
return $output&#91;$array&#91;$i&#93;&#93;;
&#125;
&#125;
if &#40;is_null&#40;$output&#91;"prev"&#93;&#41;&#41; &#123;return $default;
&#125; else &#123;

$array = array&#40;'q','query','search','p','/images?q'&#41;;
$count = count&#40;$array&#41;;
$dummy =$output&#91;"prev"&#93;;

for&#40;$i=0; $i<$count; $i++&#41; &#123;
parse_str&#40;$dummy, $output2&#41;;
if&#40;$output2&#91;$array&#91;$i&#93;&#93; != null&#41; &#123;
return $output2&#91;$array&#91;$i&#93;&#93;;
&#125;&#125;&#125;&#125;

// Ab hier neu!

$pruefe = $_SERVER&#91;"HTTP_REFERER"&#93;;

if&#40;strstr&#40;$pruefe, "deine-domain.de"&#41;&#41;&#123;$auswahl = "beliebiger Suchbegriff";
&#125;
else &#123;if &#40;referer2keyword&#40;&#41; != "none"&#41;&#123;$auswahl = urlencode&#40;referer2keyword&#40;&#41;&#41;;

$datei = "datei.txt";
$somecontent = urlencode&#40;referer2keyword&#40;&#41;&#41;."\n";

$handle = fopen&#40;$datei,"a"&#41;;
fputs&#40;$handle,$somecontent&#41;;
fclose&#40;$handle&#41;;

&#125;
&#125;
echo&#40; "<a href=\"http&#58;//www.crawl-it.de/crawlit/registration/search.it?p_userid=000000&p_search=" .htmlentities&#40;$auswahl, ENT_QUOTES&#41;. "\" target=\"self\" style=\"text-decoration&#58; none\">Deine Suchergebnisse zu " .htmlentities&#40;$auswahl, ENT_QUOTES&#41;. "</a> | "&#41;; 
 

?>

xlb
PostRank 5
PostRank 5
Beiträge: 282
Registriert: 13.08.2009, 21:11

Beitrag von xlb » 21.03.2011, 14:52

Wer hat denn dieses Script verbrochen?
$array = array('q','query','search','p');
$count = count($array);
Reservierte Wörter als Variable(nnamen)
echo( "<a href ...
echo mit Klammer - wie niedlich ... 8)
... wirft er anstelle der Referrer Keys folgendes aus: Undefined variable: query
Weil Existenz und "Wert" einer Variablen "query" ohne weitere Prüfung vorausgesetzt werden, aber in der Situation nicht vorhanden sind.

Hab mal was altes rausgekramt ...

Code: Alles auswählen

function getSearchQuery&#40;$RefX=''&#41;
	&#123;	
		$QueryID=array&#40;'q','p','prev'&#41;;
		
		if&#40;$RefX==''&#41;								// kein entsprechender Funktionsparamater angegeben, dann
		&#123;									// versuche aktuellen Referer zu ermitteln
			$RefX=	&#40;	isset&#40;$_SERVER&#91;'HTTP_REFERER'&#93;&#41; 
					AND 
					!empty&#40;$_SERVER&#91;'HTTP_REFERER'&#93;&#41;
				&#41;
				?&#40;$_SERVER&#91;'HTTP_REFERER'&#93;&#41;
				&#58;'';
		&#125;	
				
		if&#40;	$RefX!='' 							// wenn Referer &#40;jetzt&#41; vorhanden,
			AND 
			&#40;$parsedRefX=parse_url&#40;$RefX&#41;&#41;!==false				// "plausibel aufgelöst" werden kann,
			AND
			isset&#40;$parsedRefX&#91;'query'&#93;&#41;					// und Query-Parameter gefunden wurden, dann ...
		  &#41;		
		&#123;			
			parse_str&#40;$parsedRefX&#91;'query'&#93;,$QueryParms&#41;;			// ... extrahiere einzelne Query-Parameter
						
			foreach&#40;$QueryID as $QID&#41;					// durchlaufe mögliche Query-Identifier
			&#123;					
				if&#40;array_key_exists&#40;$QID,$QueryParms&#41;&#41;			// wenn Query-ID in Referer , dann ...
				&#123;
					return explode&#40;' ',$QueryParms&#91;$QID&#93;&#41;;		// "spalte" einzelne Suchbegriffe auf und
				&#125;							// liefere Array zurück
			&#125;			
		&#125;
	&#125;
Die Kommentare sprechen IMHO für sich ...

Es wird ein Array mit den einzelnen Keys zurückgeliefert, die man in ein File oder DB-Tabelle schreiben oder sonstwas mit machen kann. Eine Sonderbehandlung für die Bildersuche über Google.com fehlt (sofern kein Framebraker verwendet wird) in der Version.

Melegrian
PostRank 10
PostRank 10
Beiträge: 3170
Registriert: 30.01.2005, 12:36

Beitrag von Melegrian » 21.03.2011, 15:49

xlb hat geschrieben:Wer hat denn dieses Script verbrochen?
Ich nehme mal an, das war der Anfang vom Script:

https://www.coder-wiki.de/HowTos/PHP-Ke ... r-auslesen

Habe an der Funktion nichts geändert, weil ich die nie so geschrieben hätte.

Es geht noch einfacher als in Deinem Beispiel. Einfach beim Referrer mit str_replace alles wie p= oder su= in q= umwandeln und nach parse_str lässt sich $q einfach ausgeben oder speichern, ohne das eine Schleife oder sonst etwas benötigt wird.

Nun habe ich mir noch etwas die Zeit verspielt und komplett mit Speicherung und Ausgabe würde es dann so aussehen wie nachfolgend. Nur ich brauche das Script ja nicht. Auch schnell noch mit Google, Yahoo und Bing getestet, da klappt es zumindest. Bildersuche habe ich jetzt nicht getestet, doch die Arrays lassen sich ja bei Bedarf erweitern.

Code: Alles auswählen

<?php

$pruefe = rawurldecode&#40;$_SERVER&#91;"HTTP_REFERER"&#93;&#41;;

if&#40;strstr&#40;$pruefe, "deine-domain.de"&#41;&#41;&#123;$auswahl = "beliebiger Begriff";
&#125;
else &#123;
  
  $refeins = array&#40;"?q=","query=","su=","p="&#41;; 
  $refzwei = array&#40;"?x&q=","q=","q=","q="&#41;;
  $refdrei = str_replace&#40;$refeins,$refzwei,$pruefe&#41;;

  parse_str&#40;$refdrei&#41;;

if &#40;empty&#40;$q&#41;&#41;&#123;$auswahl = "beliebiger Begriff";
&#125;
else &#123;$auswahl = $q;

$datei = "datei.txt";
$eintrag = $q."\n";

$handle = fopen&#40;$datei,"a"&#41;;
fputs&#40;$handle,$eintrag&#41;;
fclose&#40;$handle&#41;;
&#125;&#125;

echo "<a href="http&#58;//www.crawl-it.de/crawlit/registration/search.it?p_userid=000000&p_search=" .htmlentities&#40;$auswahl, ENT_QUOTES&#41;. "" target="self" style="text-decoration&#58; none">Deine Suchergebnisse zu " .htmlentities&#40;$auswahl, ENT_QUOTES&#41;. "</a> | "; 

?>

S0l0ng
PostRank 5
PostRank 5
Beiträge: 258
Registriert: 06.11.2008, 08:55

Beitrag von S0l0ng » 23.04.2011, 07:31

Hallo Melegrian,

danke nochmal für deinen Code. Für den Nutzer funktioniert der soweit auch einwandfrei (ich habe den in einer Seite verbaut). Aber der Googlebot hat offenbar noch Probleme damit?! Im Google Cache ist an der Stelle wo der PHP Code käme ein Fatal error indexiert (Undefined index: HTTP_REFERER)
Contaxe, die Alternative zum Geldverdienen mit Foren!

Synonym
PostRank 10
PostRank 10
Beiträge: 3708
Registriert: 09.08.2008, 02:55

Beitrag von Synonym » 23.04.2011, 07:49

Hört sich logisch an und liegt daran:

Code: Alles auswählen

$pruefe = rawurldecode&#40;$_SERVER&#91;"HTTP_REFERER"&#93;&#41;; 
Wenn der Referer fehlt, dann erfolgt ein "rawurldecode" auf NICHTS bzw. gibt es den Index HTTP_REFERER im Array gar nicht und das ist eben der Fehler.

Also überprüfe mit isset() und/oder empty() ob $_SERVER["HTTP_REFERER"] überhaupt vorhanden/gefüllt ist.

Wenn nicht, dann kannst Du das ganze gleich beenden, da ja eben keiner da ist, also weder "deine-domain.de" noch ein Suchstring.

Selbiges auch möglicherweise etwas später bei

Code: Alles auswählen

if &#40;empty&#40;$q&#41;&#41;&#123;$auswahl = "beliebiger Begriff"; 
Du prüfst da zwar, ob $q etwa enthält oder leer ist, aber du prüfst nicht, ob $q überhaupt existiert...

Wäre also, wenn es im String nicht war, wieder ein Zugriff auf eine nicht existente Variable.

S0l0ng
PostRank 5
PostRank 5
Beiträge: 258
Registriert: 06.11.2008, 08:55

Beitrag von S0l0ng » 23.04.2011, 08:03

Leider habe ich sehr begrenzte PHP Kenntnisse :roll:

Wenn ich es richtig verstanden habe (und der code stimmt) sollte

Code: Alles auswählen

         $pruefe=   &#40;   isset&#40;$_SERVER&#91;'HTTP_REFERER'&#93;&#41;
               AND
               !empty&#40;$_SERVER&#91;'HTTP_REFERER'&#93;&#41;
            &#41;
            ?&#40;$_SERVER&#91;'HTTP_REFERER'&#93;&#41;
            &#58;'';
statt der Zeile

Code: Alles auswählen

$pruefe = rawurldecode&#40;$_SERVER&#91;"HTTP_REFERER"&#93;&#41;; 
funktionieren?
Contaxe, die Alternative zum Geldverdienen mit Foren!

Synonym
PostRank 10
PostRank 10
Beiträge: 3708
Registriert: 09.08.2008, 02:55

Beitrag von Synonym » 23.04.2011, 08:14

Also das ganze mal etwas zusammengerückt....

Code: Alles auswählen

$pruefe = &#40;isset&#40;$_SERVER&#91;'HTTP_REFERER'&#93;&#41; AND !empty&#40;$_SERVER&#91;'HTTP_REFERER'&#93;&#41;&#41; ? $_SERVER&#91;'HTTP_REFERER'&#93; &#58; '';
Sollte eigentlich gehen, sehe da nun auf die Schnelle keinen Fehler.

Aber bedenke, das ganze Script ist sehr unsauber....

parse_str() wendet man normalerweise nur auf den Query-String an und nicht auf die ganze URL.

parse_str() erstellt ohne den zweiten Parameter für jeden gefundenen Parameter eine neue Variable. Aktuell geht es so, doch was ist, wenn auf Deiner Seite wo anders eine Var definiert und belegt wurde und die danach erst verwendet wird? Kommt nun ein Parameter der genau so heißt, dann wird die eigentliche Var überschrieben.

Also eigentlich immer den zweiten Parameter nutzen, dann legt parse_str() nicht lauter einzelne Variablen an, sondern packt alles in ein Array. Da kann man dann ja auch nachsehen, ob $arr['q'] vorhanden ist und Werte enthält.

Das hier macht auch nicht immer das was es soll

Code: Alles auswählen

if&#40;strstr&#40;$pruefe, "deine-domain.de"&#41;&#41;&#123;$auswahl = "beliebiger Begriff"; 
Du willst interne Zugriffe "filtern".... Wenn aber eine URL ala "fremde-seite.de?a=1&b=2&c=deine-domain.de" übergeben wird, dann ist das ein Treffer, da Dein Domainname ja vorkommt. Also sollte man da eigentlich prüfen, ob der Host vom Referer Deine Domain ist und nicht, ob Deine Domain irgendwo vorkommt.

Synonym
PostRank 10
PostRank 10
Beiträge: 3708
Registriert: 09.08.2008, 02:55

Beitrag von Synonym » 23.04.2011, 08:18

Wobei... Wenn Du das so machst, dann ist $pruefe ohne Referer einfach nur leer. Der if-Bereich danach ist false und der else-Bereich greift. Der braucht aber nicht greifen, da Du ja schon weißt, dass $pruefe leer ist, also ist da auch kein Querystring vorhanden.

Daher sagte ich ja -> Wenn nicht, dann kannst Du das ganze gleich beenden...

Also alles nach dieser Zeile $pruefe.... eben nur ausführen, wenn $pruefe auch einen Wert enthält.

S0l0ng
PostRank 5
PostRank 5
Beiträge: 258
Registriert: 06.11.2008, 08:55

Beitrag von S0l0ng » 23.04.2011, 08:18

Ich seh' schon... ich werd mich doch noch irgendwann hinsetzten und php lernen müssen :-?
Contaxe, die Alternative zum Geldverdienen mit Foren!

Antworten
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag