file_exits() zuerst false abarbeiten

Habe ich da jetzt was falsch verstanden ? Du willst also nur EINE Zahl in der Datei speichern, und diese Auslesen, um 1 erhöhen und wieder reinschreiben ?

DAS ginge nämlich ganz einfach:
Code:
<?

$fn = "sl_log1_data.txt";

if( !$fp = fopen($fn,"r") )
  echo "Kann Datei $fn nicht &ouml;ffnen";
else {
  $content = fread($fp, filesize($fn));
  fclose($fp);

  $content += 1;
  $fp = fopen($fn, "w");
  fwrite($fp, $content);
  fclose($fp);
} 

?>
 
Sorry, aber irgendwie hab ich mich wohl falsch ausgedrückt.
Ich hatte mir das so gedacht:

Wenn Logdatei nicht vorhanden, diese erstellen und ne Null reinschreiben.
Logdatei ist vorhanden, diese öffnen, Zahl in erster Zeile auslesen, VOR dieser Zahl neue Zeile einfügen, Zahl + 1 und diese Zahl reinschreiben mit zusätzlichen Datum (was aber eine neue Baustelle ist), Datei speichern.

Es sollte dann etwa so aussehen:
3 12:30
2 12:29
1 12:28

So, in etwa. Bin halt noch blutiger Anfänger in PHP. :)
 
Ach so :D

Na das kannst Du dann zB so machen:
Code:
<?

$fn = "sl_log1_data.txt";

// Versuche, Datei zum lesen zu öffnen, wenn Datei nicht existiert,
// Erstelle sie neu und schreibe "0" hinein.
if( !($fp = fopen( $fn,"r" )) ) {
  $fp = fopen( $fn, "wt" );
  fwrite( $fp, "0\n");
  fclose( $fp );
}
else {
  // Lese Datei aus und Teile die Zeilen nach Zeilenumbruch in einzelne Stücke
  $content = fread($fp, filesize($fn));
  fclose($fp);
  $ar = explode("\n", $content);

// Nimm die erste Zeile, und suche nach erstem Leerzeichen, um an den Zähler zu kommen
  $line = $ar[0];
  $pos = strstr($line, " "); // finde erstes Leerzeichen
  $zaehler = substr($line, 0, $pos); // Extrahiere die Zahl
  $zaehler += 1;

// Erstelle neue Zeile und füge sie VOR dem Datei-Inhalt an  
  $newLine = $zaehler." ".date("d.m.Y H:i:s")."\n";
  $content = $newLine.$content;

// Speichere in der Datei
  $fp = fopen($fn, "w");
  fwrite($fp, $content);
  fclose($fp);
} 

?>
 
Hallo Andy72,
beste Dank erstmal für deine prompten Vorschläge und deine Geduld. ;)

Ich deinen Vorschlag schnell getestet und beim ersten Aufruf schmeißt er mir eine Fehlermeldung:
Warning: fopen(sl_logt1_data.txt) [function.fopen]: failed to open stream: No such file or directory in ../sl_logt1.php on line 7

Danach läuft alles wie es sollte sogar mit der eigentlich erst für die Zukunft vorgesehenen Baustelle "Datum und Uhrzeit einfügen"! Thanx Vestehen tu das ganze zwar noch nicht so ganz, aber dann habe ich ja noch einiges zu büffeln! ;)

Also, die Abfrage ob die Datei vorhanden ist, ist nur eine Sicherheitsabfrage (bin halt auch Sicherheitsfanatiker), falls sie nicht vorhanden sein sollte, wird die Datei erstellt. Danach soll der Rest immer abgearbeitet werden. Wenn ich das richtig sehe, wird aber nach der ersten if-Anweisung abgebrochen, so das der erste Zugriff nicht dokumentiert wird. Ist das richtig?
 
Dann ändere den Leseversuch um:

Code:
---------if( !(fopen($fn, "r")) )
+++++if( !file_exist($fn) ) {
  $fp = fopen($fn, "w");
  weiterer code
}

Der erste Zugriff schreibt nur "0" hinein, und verlässt die Funktion - ja, so ist es :)
 
Jep, schreib ne null rein und hört auf. Das heißt der erste Zugriff wird nicht mitgelogt. :(
War zwar anders gedacht aber wohl für mich auch erstmal nicht anders zu lösen. Besten Dank nochmals
Aber nochmal zum Verständis: "merkt" sich PHP das die Datei nicht vorhanden war? Wenn ich das "else" wegnehme, weil der letzte Part ja im jeden Fall abgearbeitet werden soll, hagelt es wieder Fehlermeldungen wegen fehlendem Stream, obwohl die Datei eigentlich gerade erstellt wurde.
 
Das ich statt einer 0 auch eine 1 reinschreiben könnte beim erstellen der Datei, hatte ich mir schon gedacht. Aber dann sieht der erste Zugriff natürlich anders aus als die übrigen (fehlendes Datum und so). Zwar könnte ich auch das reinschreiben, aber eigentlich sollten in (einer wahrscheinlich sehr fernen) Zukunft, eine Funktion bei JEDEM Zugriff aufgerufen werden. Ich kannte das zb. von VB dass man den erste Part überspringen kann, falls nicht gebraucht (ähnlich wie "goto .."). Sowas in etwa hatte ich mir vorgestellt. Der erste Part mit dem überprüfen der Datei, war nur für Sicherheitsfanatiker wie mich gedacht. ;) Wenn die Datei gleich mit angelegt wird ist er eigentlich völlig überflüssig. Der zweite Part aber soll IMMER abgearbeitet werden.
Aber besten Dank, ich werde einfach eine Logdatei mit anlegen.
 
Mit angelegter Datei klappt es jetzt, dank euch
Das aufsplitten des Strings verstehe ich zwar noch noch so ganz(strstr), aber da hab ich ja noch etwas zu beißen. Jetzt muß ich aber los, euch ein schönes Wochenende und nochmals Thanx
 
Zurück