Andreas Korthaus: txt Datei erzeugen

Beitrag lesen

Hi Christoph!

<?
  if (!fwrite($handle, $somecontent)) {
         print "Kann in die Datei $filename nicht schreiben";
         exit;
     }
  ?>
(nach http://de2.php.net/manual/de/function.fwrite.php) Hier wird genau von dieser if-Bedingung ebenfalls eine Datei angelegt,

nein. Das mach ggfs. fopen().

vorausgesetzt, die beiden anderen Variablen haben Werte und existieren. Was ich nicht ganz nachvollziehen kann, ist dabei die Verneinung mit "!"  -  ich würde da noch ein "else" reinschreiben, um $handle zu öffnen bzw. anzulegen, das ist aber gar nicht nötig. Das vollständige Beispiel findet sich als Beispiel 1 unter der angegebenen Handbuchadresse.
Irgendwie fehlt mir da ein Stückchen Logik. Ich finde es ja schön, daß das Handbuchbeispiel funktioniert, ich würde bloß gerne wissen wollen, _warum_ es mit dieser Verneinung funktioniert.

Ist besser am "etwas vollständigeren" Beispiel nachzuvollziehen:

// Öffne Datei (ggfs. versuchen anzulegen), wenn es nicht klappt
   // wird der Ausdruck als !FALSE -> TRUE ausgewertet
   if (!$handle = fopen($filename, "a")) {
         print "Kann die Datei $filename nicht öffnen";
         exit;
   }

// Schreibe Daten in die Datei, wenn das nicht geklappt hat
   // wird der Ausdruck ebenfalls als !FALSE -> TRUE ausgewetet
   if (!fwrite($handle, $somecontent)) {
       print "Kann in die Datei $filename nicht schreiben";
       exit;
   }

Ich hab jetzt echt ein paar Minuten in der Doku gesucht, aber ich habe irgendwie nicht die Stelle gefunden wo das eindeutig beschrieben wird, ich dachte eigentlich das ständ da irgendwo.

Jedenfalls wertet "if" ja den Ausdruck zwischen () von rechts nach links aus, um zu testen ob denn der Ausdruck TRUE oder FALSE ergibt. Dabei wird dann auch fopen() bzw. fwrite() ausgeführt. Sollte jetzt fwrite() nicht funktioniert haben, das heißt es ist irgendein Fehler aufgetreten, dann gibt frwite() bekanntlich FALSE zurück. Dann wertet if !FALSE zu TRUE aus, und die Fehlermeldung wird ausgegeben. Sonst gibt fwrite() einen INT Wert zurück, der dann gemäß http://de2.php.net/manual/de/language.types.boolean.php#language.types.boolean.casting in TRUE umgewandelt wird, so dass if !TRUE als FALSE auswertet, die Fehlermeldung wird nicht ausgegeben. Allerdings dürfte es auch eine Fehlermeldung geben, wenn der String der in die Datei geschrieben wird die Länge 0 hat.

Grüße
Andreas

--
SELFHTML Feature Artikel: http://aktuell.de.selfhtml.org/artikel/