Kurze Frage zu Zeile im Textfile Löschen !
Daniela
- php
0 Benedikt Hermann0 Auge
Hi !
Das folgende Script loggt meine Referer nur möchte ich das immer nur zehn gespeichert werden und somit versuche ich das die erste Zeile bei einem neu ermittelten Referer gelöscht wird.
Nur löscht mein selbst gebasteltes Script auch bei einem Reload und bei erneuten Betreten der Seite jeweils eine Zeile was normal nur bei einem neuen Eintrag erfolgen soll.
Was muss ich am Script ändern um nur zehn der neusten Einträge zu Speichern bzw. nur bei einem neuen Referer die erste und somit älteste Zeile zu löschen ?
Aber bitte keine Antworten wie array() auslesen und zurückschreiben usw. denn das bringt mich einfach nicht weiter, da ich eine blutige Anfängerin bin und seit zwei tagen schon alles Probiert habe und ich nun an einem Punkt angelangt bin an dem ich einfach nicht weiter weiß !
<?php
$name = 'daten.txt';
{
$file="daten.txt";
$zeile = file($file);
$zeilen = count($zeile);
$zeile[$id] = "*del_this*";
for ($i=1; $i<$zeilen; $i++){
if ($zeile[$i]!= $zeile[$id]){
$new=$new.$zeile[$i];
}
}
$datei=fopen($file,"w");
fputs($datei,$new);
fclose($datei);
$from = HTTP_REFERER;
if ($HTTP_REFERER == '') {$HTTP_REFERER = exit();}
if ($lange <91) {
for ($i = 1; $i <= (90-$lange); $i++) {
}
}
$zeile= "$from";
$file = fopen($name, "a");
if($file) {
fputs($file, $zeile);
fputs($file, "\r\n");
fclose($file);
}
}
?>
Nur löscht mein selbst gebasteltes Script auch bei einem Reload und bei erneuten Betreten der Seite jeweils eine Zeile was normal nur bei einem neuen Eintrag erfolgen soll.
Hallo,
starte beim ersten schreiben in das Logfile einfach eine Session -> session_start(). Durch initialisierst Du eine Variable...
Bei schreiben in das Logfile (oder schon vorher) überprüfst Du einfach auf vorhandensein dieser Variable: Ist sie vorhanden, mache garnix, ist sie nicht vorhanden, schreibe die Herkunft in die Log Datei.
Schönen Abend
Benedikt Hermann
Hallo
Grundsätzlich: Du liest mit file() daten.txt zeilenweise in ein Array ein.
Zuerst solltest Du die Zeilenumbrüche mit trim() entfernen,
http://www.php.net/manual/de/function.trim.php
da diese sonst zum Element dazugehören. Das macht das Vergleichen
unmöglich, außer Du vergleichst die Zeile mit dem Referer + Zeilenumbruch.
Geht zwar auch, ist aber trotzdem Unfug. ;-)
Dann hast Du Deine zehn Referers pur im Array.
Danach vergleichst Du diese mit dem Referer des aktuell aufrufenden
Besuchers.
Dazu bietet sich in_array()innerhalb einer Bedingung (if(in_array()) an.
http://www.php.net/manual/de/function.in-array.php
Ist der Referer verzeichnet, kannst Du das Skript abbrechen,
ansonsten löschst Du mit array_shift()
http://www.php.net/manual/de/function.array-shift.php
das erste Element des Arrays und hängst mit array_push()
http://www.php.net/manual/de/function.array-push.php
den neuen Referer an das Ende des Arrays an.
Nun muß die Größe des Arrays geprüft werden, es sollen ja nicht mehr
als 10 Elemente werden. Mit $bla = count($zeile) bekommst Du die
momentane Größe des Arrays zurück. Ist das Array größer als 10, wird
mit einer Bedingung (if ($bla>10)) die "Übergröße" gemessen.
$bla abzüglich 10 ergibt die Anzahl der zu löschenden Elemente.
Also: $blubb = $bla-10;
Diese kannst Du z.B. mit array_splice($zeile,0,$blubb) löschen.
http://www.php.net/manual/de/function.array-splice.php
$zeile ist das Array,
0 ist das erste zu löschende Element (Es wird doch vom Anfang gelöscht?)
$blubb ist die Anzahl der zu löschenden Elemente.
Es sollte eigentlich immer nur ein Element sein.
So, jetzt muß die Datei nur noch neu geschrieben werden.
$datei = fopen($file,"w");
flock($datei,2);
for ($a=0;$a<count($zeile);$a++)
// geht auch mit Deinem $zeilen ($a<$zeilen) in der Mitte.
// Ich habe es mir so angewöhnt, deshalb hier auch so notiert.
{
fputs($datei,$zeile[$a]."\n"); // Zeilenumbrüche zeilenweise wieder anfügen
}
flock($datei,3);
fclose($datei);
Zu flock() http://www.php.net/manual/de/function.flock.php
Wenn Dir die Beschreibungen nicht liegen, versuche es bei
http://www.selfphp.info/befehlsverzeichnis/index.php
und such Dir die Befehle dort heraus.
Tschö, Auge