[ PHP ] Bisschen Hilfe gesucht...

Diskutiere [ PHP ] Bisschen Hilfe gesucht... im Developer Network Forum im Bereich Hardware & Software Forum; Ich habe keine Ahnung von PHP und mit viel lesen der PHP-Referenz ein script zusammengebastelt, welches Referer, IP, Zeit uswusw. in eine...
  • [ PHP ] Bisschen Hilfe gesucht... Beitrag #1
O

oiermann

Bekanntes Mitglied
Dabei seit
30.12.2005
Beiträge
1.342
Reaktionspunkte
0
Ort
Milchstrasse
Ich habe keine Ahnung von PHP und mit viel lesen der PHP-Referenz ein script zusammengebastelt, welches Referer, IP, Zeit uswusw. in eine Textdatei schreibt.
Allein daran saß ich nen halben Tag :p
Nun möchte ich etwas schreiben, was mir die Textdatei rückwärts anzeigt (also letzte Zeile, sprich neuster Eintrag ganz oben, ältester Eintrag ganz unten) und die Grösse der Datei überprüft. Sobald sie eine gewisse Grösse erreicht hat, soll es mir die Datei per E-Mail schicken und dann auf dem Webspace leeren.

Ich will jetzt keine kompletten Codes, sondern nur ein paar Denkanstöße... Die, für mich, wichtigsten Befehle mal, dass ich nicht wieder total Planlos durch die Referenz irre.
 
  • [ PHP ] Bisschen Hilfe gesucht... Beitrag #2
MR.Q

MR.Q

Bekanntes Mitglied
Dabei seit
17.11.2005
Beiträge
1.359
Reaktionspunkte
0
Zeile für Zeile auslesen, in Array speichern und Array umgekehrt wieder ausgeben.

Wenn Länge_von_Array größer als x, dann senden()
 
  • [ PHP ] Bisschen Hilfe gesucht... Beitrag #3
T

TrµMAn

Bekanntes Mitglied
Dabei seit
23.10.2006
Beiträge
4.882
Reaktionspunkte
2
Ort
Wuppertal
es gibt glaub ich auch nen einfachen parameter damit er in der textdatei den cursor an den anfang setzt ...
 
  • [ PHP ] Bisschen Hilfe gesucht... Beitrag #4
O

oiermann

Bekanntes Mitglied
Dabei seit
30.12.2005
Beiträge
1.342
Reaktionspunkte
0
Ort
Milchstrasse
Ich will doch nicht an Anfang, gerade umgekehrt. Aber das hab ich jetzt hinbekommen:
PHP:
<?
 $array = file('textdatei.txt');
 $i = sizeof($array);
 while ($i--) {
  echo trim($array[$i]) . "<br>";
 }
?>
Wobei mir google da mehr Hilfe wie das Manual war...

Nun klemmts hier:
PHP:
<?
 $groesseB = filesize("textdatei.txt");
 if($groesseB > 30)
 {
  $text = file("textdatei.txt");
  $emailto = "[email protected]";
  $title = "Log ist voll!";
  mail($emailto, $title, $text, "From: blahr");
 }
?>
Da kommt das bei raus:

Warning: mail() expects parameter 3 to be string, array given in /www/usersites/m-r/nils/pub/....php on line 16

Wie bekomm ich das noch hin?
 
Zuletzt bearbeitet:
  • [ PHP ] Bisschen Hilfe gesucht... Beitrag #5
guzi

guzi

Bekanntes Mitglied
Dabei seit
11.02.2002
Beiträge
1.505
Reaktionspunkte
2
Ort
nirvana
Mail() erwartet als 3. Parameter einen String. Du hast aber ein Array übergeben.
Anstatt das Array auszugeben in deiner oberen while-Schleife kannst du die Ausgabe an einen String anhängen und erst dann der Mail-Funktion übergeben.
 
  • [ PHP ] Bisschen Hilfe gesucht... Beitrag #6
O

oiermann

Bekanntes Mitglied
Dabei seit
30.12.2005
Beiträge
1.342
Reaktionspunkte
0
Ort
Milchstrasse
Das mit der while Schleife ist ein bisschen blöd, da dies eigentlich zwei extra Dateien werden sollen, die eine zum lesen und die andere soll mit jedem Seitenaufruf mitgestartet werden (die mit der Mail Funktion), denn ich hab auf dem Webspace keine Cronjobs und die logfile soll nicht zu gross werden.
Aber ich kann ja eine zweite Schleife machen, das sähe dann ungefähr so aus, oder?

{ while blabla $array
$string = $string + $array
}
 
  • [ PHP ] Bisschen Hilfe gesucht... Beitrag #7
guzi

guzi

Bekanntes Mitglied
Dabei seit
11.02.2002
Beiträge
1.505
Reaktionspunkte
2
Ort
nirvana
Fast! $array[$index] um jeweils eine Zeile auszugeben.
 
  • [ PHP ] Bisschen Hilfe gesucht... Beitrag #8
O

oiermann

Bekanntes Mitglied
Dabei seit
30.12.2005
Beiträge
1.342
Reaktionspunkte
0
Ort
Milchstrasse
So ich habs jetzt. So wie du es gesagt hast, kam ich nicht mit klar.
Aber dafür so:

PHP:
<?
$max_groesse_log = 3145728
$logfile = "";
$emailto = ""
$title = "Log ist voll!";
$from = "Deiner Homepage";


 $array = file($logfile);
  $i = sizeof($array);
   while ($i--) {
    echo trim($array[$i]) . "<br>";
   }

 $groesseB = filesize($logfile);
  if($groesseB > $max_groesse_log)
  {
    $text = file($logfile);
    $string_log = implode("<br>", $text);
    mail($emailto, $title, $string_log, $from);
    unlink($logfile);
    fopen($logfile,"w");
    fclose($logfile);
  }
?>
Ich muss das jetzt nur noch aufteilen, dass der Teil für das Senden/Löschen/Anlegen mit jedem Seitenaufruf auch aufgerufen wird. (Einfach in den Counter mit einbinden oder so).

Vielen Dank :)
 
  • [ PHP ] Bisschen Hilfe gesucht... Beitrag #9
O

oiermann

Bekanntes Mitglied
Dabei seit
30.12.2005
Beiträge
1.342
Reaktionspunkte
0
Ort
Milchstrasse
So noch ne Frage dazu, wie stell ich es an, dass eine Leerzeile eingebaut wird, wenn die IP des Besuchers sich von der Letzten IP im Log unterscheidet? Also dass für jeden Besucher quasi ein eigener "Block" im Log zu sehen ist?
 
  • [ PHP ] Bisschen Hilfe gesucht... Beitrag #10
T

TrµMAn

Bekanntes Mitglied
Dabei seit
23.10.2006
Beiträge
4.882
Reaktionspunkte
2
Ort
Wuppertal
Code:
echo "\n\n"
 
  • [ PHP ] Bisschen Hilfe gesucht... Beitrag #11
O

oiermann

Bekanntes Mitglied
Dabei seit
30.12.2005
Beiträge
1.342
Reaktionspunkte
0
Ort
Milchstrasse
Erstens kommt die Leerzeile so nur auf den Bildschirm und nicht ins Log und zweitens wärs dann ja nach jedem Eintrag so.
Aber ich hab ja mehrere Einträge im Log von den selben IP und die sollen zusammengefasst sein.

Aber ich hab mir jetzt mal ein paar php-Counter mit Logfunktion angesehen und das ist bissl blöd, keiner von denen hatte das (ausser die mit SQL), sprich wird demnach ziemlich schwierig werden...
 
  • [ PHP ] Bisschen Hilfe gesucht... Beitrag #12
O

oiermann

Bekanntes Mitglied
Dabei seit
30.12.2005
Beiträge
1.342
Reaktionspunkte
0
Ort
Milchstrasse
Also mr q hat mir im ICQ grad ein bisschen geholfen und ich werd mal versuchen das umzusetzen, wenns fertig ist oder neue Probleme auftreten meld ich mich wieder (ersteres wird hoffentlich eher der Fall sein :) )
 
  • [ PHP ] Bisschen Hilfe gesucht... Beitrag #13
O

oiermann

Bekanntes Mitglied
Dabei seit
30.12.2005
Beiträge
1.342
Reaktionspunkte
0
Ort
Milchstrasse
Tadaaa, es ist fertig und tut so wie es soll.

Fall es wen interessiert:

Ich hoffe sie ist gut genug kommentiert.
Dieses Script loggt alles mit und schreibt es in eine Datei. Jede ip bekommt im Log einen eigenen "Block". Als beispiel so:
ip1 .....
ip1 .....

ip2 .....
ip2 .....

ip1 .....

Wenn das Log eine vorher festgelegte Größe erreicht hat, dann wird das Log per Email verschickt und geleert.
Diesen Code in die zu loggende Seite einfügen (macht keinerlei Ausgabe, man sieht nichts davon):
PHP:
<?
$wo = "index";	       // wo war der user?
$log = "log.txt";      // logdatei
$max_groesse_log = "3145728";		// 3145728 = 3MB
$emailto = "[email protected]";		// deine email adresse
$title = "Log ist voll!";		// email Titel
$from = "Deine Homepage sagt:";
?>

<?
if (isset($_SERVER['HTTP_REFERER'])) {		// wenn im übertragenen referer was steht
  $ref = $_SERVER['HTTP_REFERER'];		// dann in $ref den referer schreiben
} else {
  $ref = 'Kein referer erhalten!';		// ansonsten das hier
}
  $ip = $_SERVER['REMOTE_ADDR'];		// remote IP abfragen
  $agent = $_SERVER['HTTP_USER_AGENT'];		// browser abfragen
  $spr = $_SERVER['HTTP_ACCEPT_LANGUAGE'];	// browsersprache abfragen
  $datum = date("d.m.Y-H:i:s");			// Zeit
  $logfile = fopen ($log, "a");			// log öffnen

  $datei = file($log);					// $datei wird in ein array eingelesen
  $letzte_zeile = array_pop($datei);			// letzte zeile rauspicken
  $aufteilen = explode("|", $letzte_zeile);		// ip aus der letzten zeile picken

  if($aufteilen[0] != $ip) {				// wenn die letzte ip im log nicht mit der jetzigen
							// übereinstimmt, dann 
    fwrite($logfile, "\n");				// eine leerzeile ins log einfügen
   }
  fwrite($logfile, "$ip|$wo|$datum|<b>$ref</b>|$agent|$spr\n");		// daten ins log schreiben
									// einfach in die <b> tags fügen was bei readlog.php
									// fett geschrieben werden soll, in diesem fall der
									// referer
  fclose($logfile);

  $groesseB = filesize($log);						// groesse der log datei erfassen
  if($groesseB > $max_groesse_log)					// wenn groesse...
  {
    $text = file($log);
    $string_log = implode("<br>", $text);
    mail($emailto, $title, $string_log, $from);				// ...log file mailen
    unlink($log);							// ...log file löschen
    fopen($log,"w");							// ...und wieder anlegen
   } 
?>


Hier die "readlog.php" um das Log in zu lesen. Der Letzte, also der neuste Eintrag, wird zuerst angezeigt und der älteste ganz am Schluss. In der log Datei ist es gerade umgekehrt.
PHP:
<pre>
<?
  $log = "log.txt";			// log einlesen
  $array = file($log);			// in ein array schreiben
  $i = sizeof($array);			// und
  while ($i--) {			// nun
  echo trim($array[$i]) . "<br>";	// umdrehen und ausgeben
	  }				
?>
</pre>
Die Ausgabe sieht so aus:
Code:
ip|wo war der user|zeit|referer|browser|browsersprache
Ausserdem muss im verzeichnis der beiden Scripte die "log.txt" (im Script änderbar) mit schreibrechten existieren.
 
Thema:

[ PHP ] Bisschen Hilfe gesucht...

ANGEBOTE & SPONSOREN

https://www.mofapower.de/

Statistik des Forums

Themen
213.179
Beiträge
1.579.172
Mitglieder
55.878
Neuestes Mitglied
Satan666
Oben