Auge: Seiteneingaben in externer Datei speichern nur mit JS?

Beitrag lesen

Hallo

Eine Frage hätte ich dann doch noch - zu dem von dir geposteten PHP-Schnippsel. ;)

$i = 0;

while (is_file($filename.$i)) {
        $i++;
    }

file_put_contents($filename.$i.'.txt',$content);


>   
> Der Sinn dieses Abschnitts erschließt sich mir nicht wirklich. Das sorgt in der geübten Praxis dafür, dass an den Dateinamen, den ich der Variable `(filename)`{:.language-javascript} in der vorgeschalteten JavaScript-Funktion mit auf den Weg gebe, eine `0`{:.language-javascript} drangehängt wird;  
  
Nein. Die Bedingung in while prüft, ob es Dateinamen nach dem Schema „Inhalt der Variable `$filename`{:.language-php} gefolgt von einer oder mehreren Ziffern“ gibt. Wenn ja, dass wird `$i`{:.language-php} hochgezählt und erneut geprüft ob es eine Datei nach der formulierten Bedingung gibt.  
  

> Führe ich die Funktion mit der selben Variablen für `(filename)`{:.language-javascript} jedoch mehrmals aus, wird mitnichten jedesmal eine neue Datei angelegt mit ansteigender Zahl am Ende des Dateinamens, sondern es bleibt bei `filename0`{:.language-javascript} - nur das der Inhalt der Datei bei jedem Funktionsaufruf neu überschrieben wird!  
  
Klar, mit [file_put_contents](http://www.php.net/file_put_contents) wird der spezifizierte Inhalt in die spezifizierte Datei geschrieben. Wenn da immer der selbe Namen drin steht, wird auch immer die selbe Datei befüllt.  
  

> Wenn aber nun bei gleichbleibendem Variablenwert für `(filename)`{:.language-javascript} ohnehin immer nur der Inhalt der bestehenden Datei überschrieben wird, - warum dann überhaupt eine `0`{:.language-javascript} an den Dateinamen dranhängen???  
  
Was passieren soll, ist vermutlich, dass für die ersten übergebenen Daten `$filename."0.txt"`{:.language-php} erzeugt und beschrieben wird. Beim nächsten Aufruf wird der selbe Dateiname erzeugt, dann geprüft, ob es im Dateisystem bereits eine Datei mit dem Namen `$filename."0.txt"`{:.language-php} gibt. Gibt es die, wird ja $i um 1 hochgezählt und der neu übergebene Inhalt in `$filename."1.txt"`{:.language-php} geschrieben. Der nächste Aufruf soll `$filename."2.txt"`{:.language-php} erzeugen und so weiter und so fort.  
  
`is_file($filename.$i)`{:.language-php} und `file_put_contents($filename.$i.'.txt',$content)`{:.language-php} sprechen aber unterschiedliche Dateinamen an. Bei is\_file fehlt die Dateiendung. Die Prüfung auf den Namen `$filename.$i.'.txt'`{:.language-php} schlägt mit `$filename.$i`{:.language-php} halt nie an, womit der Zähler `$i`{:.language-php} brav bei „0“ bleibt.  
  

> PS: Ich nehme an, es gibt auch in PHP keinen Befehl, der in der Ausgabedatei einen Zeilenumbruch à la `<br>`{:.language-html} erzeugt, oder?  
  
Wenn da schon ein Zeilenumbruch da ist, kann man den mit [nl2br](http://www.php.net/nl2br) auch für HTML aufpeppen.  
  
Tschö, Auge  

-- 
Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.  
Terry Pratchett, "Wachen! Wachen!"  
  
ie:{ fl:| br:> va:) ls:[ fo:) rl:( ss:| de:> js:| zu:}  
  
[Veranstaltungsdatenbank Vdb 0.3](http://termindbase.auge8472.de/)