Bekomme eine TXT mit falschem Dateinamen ausgegeben

Jan-Frederik Stieler

Monsterator
Moderator
Hi,
kann mir jemand verraten warum ich hierbei am Schluss eine Datei mit dem Namen „Gästebucheintrag-guestbook.txt“ bekomme?

PHP:
<?php
	error_reporting(E_ALL);
	
	$count_open = fopen ('-guestbook.txt', 'r');		//Die Anzahl vorhandener Textdateien als seperaten Counter auslesen
	$count_get = fgets ($count_open);
	fclose ($count_open);
	
	$count_new = $count_get++;                    
	$count_open = fopen ('-guestbook.txt', 'w+');		//Erhöt den Counter um 1
	fwrite ($count_open, $count_new);            
	fclose ($count_open);                        
	
	$open = fopen ($count_new.'-guestbook.txt', 'w+');	//Die Einträge speichern
	$string = 'Gästebucheintrag';
	fwrite ($open, $string);
	fclose ($open);
?>

Ich steh irgendwie aufm Schlauch glaube ich.

Grüße
 
Hi

Hm.
was steht denn in der '-guestbook.txt' ?
Was passiert, wenn man statt
PHP:
 $count_new = $count_get++;
das schreibt:
PHP:
 $count_new = $count_get+1;

edit: Und welche PHP-Version ist das?
 
Ich hab mir das Skript mal zum Spaß kopiert, die Textdatei mit der Zahl 33 als Inhalt angelegt.

Anschließeng gab es bei mir eine Datei mit Namen 33-guestbook.txt. Sieht also so aus als ob du bei dir in der Datei das Wort Gästebucheintrag stehen hättest.
 
PHP:
$count_open = fopen ('-guestbook.txt', 'r');        //Die Anzahl vorhandener Textdateien als seperaten Counter auslesen
    $count_get = fgets ($count_open);
    fclose ($count_open);

Naja, das hier ist wohl nen semantischer fehler. Der Kommenatr alsauch die variablennamen lassen eine Zählung vermuten, der Code allerdings liest nur den Inhalt der Textdatei (genauer gesagt nur die erste Zeile) aus und schreibt ihn in die Variable $count_get .

edit//
Wenn du ein Dateibasiertes Gästbuch bauen willst, würde ich zu einem gängigen Format in den Dateien greifen. Gerne verwendet wird CSV, dazu bieten sich die folgenden Funktionen an:
http://de3.php.net/manual/de/function.fgetcsv.php (Auslesen)
http://de3.php.net/manual/de/function.fputcsv.php (Schreiben)
 
Zuletzt bearbeitet:
Hallo,
@tombe:Ja das Wort Gästebucheintrag wird ja über die Variable $string in die Datei eingefügt.
In der -guestbook.php sollte der Inhalt gezählt werden. das macht das 'r' dahinter.
Aber ich hab blöderweise nicht drangedacht zu schauen was in die Datei geschrieben wird.

@Sheel: Also grundsätzlich versuche ich das schon als PHP5 zu schreiben. Aber ich hab jetzt nur das Online PHP-Manual zur Verfügung. Falls ich da jetzt was gemischt habe wäre es nett wenn mich einer Aufklärt.
Also dein Tipp hat funktioniert. Nun wird nach jedem Aufruf eine neue Datei mit vorstehender Zahl generiert.

@alxy: Ja ich will ein dateibasierendes Gästebuch erstellen. Da ich das aber für ein dateibasierendes CMS erstelle muss ich auf Dateistruktur des CMS zurückgreifen.
Da hilft mir CSV leider nicht.

So nun muss ich noch jeweils ein Dateiordner um die Dateien erzeugen jeweils mit der gleichen Zahl.

Grüße
 
Hallo Jan,

ein Verzeichnis kannst du mit dem Befehl mkdir() anlegen.

Im übrigen kannst du dir einmal Öffnen der Datei -guestbook.txt für den Counter sparen. Nur falls Interesse zur Optimierung besteht:

PHP:
error_reporting(E_ALL);
ini_set('display_errors', 1);

$count_open = fopen ('-guestbook.txt', 'r+'); // Öffnen des Counter-Files
if ($count_open) { // Erfolgreich?
  $count_get = fgets ($count_open); // Auslesen
  fseek($count_open, 0, SEEK_SET);  // Zeiger wieder auf Anfang
  $count_new = $count_get++;        // Counter erhöhen

  mkdir($count_new);  // Verzeichnis für neuen Eintrag anlegen
  // Hier noch den Code für das Schreiben des Gästebuch-Eintrags

  fwrite ($count_open, $count_new); // Reinschreiben
  fclose ($count_open);
}
 
Hi,
klar bin ich immer an Optimierungen interessiert :).
Konnte jetzt das einemal Öffnen der Datei entfallen wegen dem r+? Ich hatte ja nur r verwendet.

Ich verstehe nur nicht so ganz warum ++ nicht funktioniert. Das ist doch das gleiche wie +1, oder?

ich werde da noch etwas rumprobieren müssen bis ich genau das Ergebnis habe welches ich brauche. Aber so lernt man das ja :).

Grüße
 
Wenn du ++ hinter der Variable schreibst, ist es ein sog. Post-Inkrement, wenn du das ++ davor schreibst, ist es ein Pre-Inkrement. Und das halt diese Folgen:

$a = 1;
$b = $a++; // Hier ist $b nach der Ausführung 1 und $a 2
$b = ++$a; // Hier ist nach der Ausführung beides 3.

Post-Inkrement bedeutet, erst wird der Wert von $a nach links zugewiesen und dann der Wert von $a erhöht. Bei Pre-Inkrement ist es genau umgekehrt.
 
Hi,
so nach einiger Zeit habe ich mal wieder etwas Muse gefunden an dem Gästebuch weiterzuarbeiten.
Nun habe ich das Problem das innerhalb des erzeugten Ordners keine Datei erzeugt und gefüllt wird.
Ich bekomme immer die Fehlermeldung „No such file or directory …“.
PHP:
<?php
error_reporting(E_ALL);

$filename = '-guestbook';
$filetype = '.txt';
$show_email = false; // Bestimmt, ob Email angezeigt (true) oder nicht angezeigt (false) werden soll
$show_website = true; // Bestimmt, ob Website-URL angezeigt (true) oder nicht angezeigt (false) werden soll
// Einlesen und Splitten der Datei:


$count_open = fopen ($filename.$filetype, 'r+'); // Öffnen des Counter-Files
if ($count_open) { // Erfolgreich?
	$count_get = fgets ($count_open); // Auslesen
	fseek($count_open, 0, SEEK_SET);  // Zeiger wieder auf Anfang
	$count_new = str_pad($count_get+1, 2 ,'0', STR_PAD_LEFT); // Counter erhöhen

	fwrite ($count_open, $count_new); // Reinschreiben
	fclose ($count_open);

	mkdir($count_new, 0777, true);  // Verzeichnis für neuen Eintrag anlegen
	$open = fopen ('./'.$count_new.$filename.'/'.$count_new.$filename.$filetype, 'w+');    //Die Einträge speichern
	$string = 'Gästebucheintrag';
	fwrite ($open, $string);
	fclose ($open);
}
Das anlegen des Ordners funktioniert. Nur mit $open gibts ein Problem welches ich nicht verstehe.


EDIT: Hatte einen Fehler im Namen von mkdir.

Viele Grüße
 

Neue Beiträge

Zurück