Rudi: Datein anlegen

Hallo,

ich habe mir aus der Doku von PHP folgendes Script kopiert:

if (is_writable($filename)) {  
  
    // Wir öffnen $filename im "Anhänge" - Modus.  
    // Der Dateizeiger befindet sich am Ende der Datei, und  
    // dort wird $somecontent später mit fwrite() geschrieben.  
    if (!$handle = fopen($filename, "w+")) {  
         print "Kann die Datei $filename nicht öffnen";  
         exit;  
    }  
  
    // Schreibe $somecontent in die geöffnete Datei.  
    if (!fwrite($handle, $anfang)) {  
        print "Kann in die Datei $filename nicht schreiben";  
        exit;  
    }  
  
    print "Head geschrieben... <br />";  
  
    fclose($handle);  
  
} else {  
    print "Die Datei $filename ist nicht schreibbar";  
}

Es funktioniert auch soweit, wenn die Datei "$filename" in meinem Fall test.php existiert. Ist das nicht der Fall wird die Datei auch nicht angelegt. Und das trotz der schreibrechte w+ ? Was mache ich falsch?

  1. Hi!

    ich habe mir aus der Doku von PHP folgendes Script kopiert:
    if (is_writable($filename)) {

    Es funktioniert auch soweit, wenn die Datei "$filename" in meinem Fall test.php existiert. Ist das nicht der Fall wird die Datei auch nicht angelegt. Und das trotz der schreibrechte w+ ? Was mache ich falsch?

    Du missachtest vermutlich den Programmfluss und siehst nicht, dass der else-Zweig ausgeführt wird. Die Datei kann nicht angelegt werden, weil der Zweig mit dem fopen() drin gar nicht ausgeführt wird.

    Lo!

    1. Du missachtest vermutlich den Programmfluss und siehst nicht, dass der else-Zweig ausgeführt wird. Die Datei kann nicht angelegt werden, weil der Zweig mit dem fopen() drin gar nicht ausgeführt wird.

      Hallo,

      das ist vollkommen richtig, ich habe die IF schleife entfernt und schon lief es...

      Jetzt habe ich ein weiteres Problem. Ich möchte gerne die Datei in einem Unterverzeichnis anlegen also:

      $filename = 'test\test.php';

      Ergebnis, es wird eine Datei geschrieben die test\test.php heißt...

      1. Hallo,

        ich habe die IF schleife entfernt und schon lief es...

        da war nirgends eine Schleife.

        Ich möchte gerne die Datei in einem Unterverzeichnis anlegen also:

        $filename = 'test\test.php';

        Ergebnis, es wird eine Datei geschrieben die test\test.php heißt...

        Klar, was hast du erwartet? Das Verzeichnis-Trennzeichen ist '/', nur Windows kennt alternativ (in früheren Versionen ausschließlich) den Backslash.

        Ciao,
         Martin

        --
        Eine Nonne kommt in den Himmel. An der Pforte fragt Petrus: "Wer bist du?" - "Ich bin die Braut Jesu." Petrus stutzt einen Moment, ruft dann nach hinten: "He Freunde, habt ihr schon gehört? Der Juniorchef will heiraten!"
        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
        1. qqwwwertzuiopüäölkjhgfdsayxcvbnm,.-

        2. Hallo Martin,

          $filename = 'test\test.php';
          Ergebnis, es wird eine Datei geschrieben die test\test.php heißt...

          Klar, was hast du erwartet? Das Verzeichnis-Trennzeichen ist '/', nur Windows kennt alternativ (in früheren Versionen ausschließlich) den Backslash.

          es gibt noch ein paar weitere Verzeichnistrennzeichen, zum Beispiel der Doppelpunkt (z.B. MacOs) oder auch der Punkt (z.B. OpenVMS), siehe Wikipedia, Path (computing).

          Freundliche Grüße

          Vinzenz

          1. Hallo Vinzenz,

            Das Verzeichnis-Trennzeichen ist '/', nur Windows kennt alternativ (in früheren Versionen ausschließlich) den Backslash.
            es gibt noch ein paar weitere Verzeichnistrennzeichen, zum Beispiel der Doppelpunkt (z.B. MacOs) oder auch der Punkt (z.B. OpenVMS), siehe Wikipedia, Path (computing).

            danke für die Ergänzung, die Varianten waren mir nicht bekannt. Den Backslash gibt's aber nur bei Windows, oder verwendet den auch noch ein anderes System?

            Ciao,
             Martin

            --
            Datenbanken speichern keine User.
            Das liegt daran, daß Datenbanken mit der Lebensmittelversorgung für gespeicherte biologische Lebensformen derzeit noch Probleme haben.
              (Christoph Schnauß)
            Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
            1. Hallo Martin,

              Das Verzeichnis-Trennzeichen ist '/', nur Windows kennt alternativ (in früheren Versionen ausschließlich) den Backslash.
              es gibt noch ein paar weitere Verzeichnistrennzeichen, zum Beispiel der Doppelpunkt (z.B. MacOs) oder auch der Punkt (z.B. OpenVMS), siehe Wikipedia, Path (computing).

              danke für die Ergänzung, die Varianten waren mir nicht bekannt.

              Ich kannte es von OpenVMS - auch wenn's fast zwei Jahrzehnte her ist - und hatte aus der VBA-Doku von MS-Office den Doppelpunkt von MacOS noch im Hinterkopf ...

              Den Backslash gibt's aber nur bei Windows, oder verwendet den auch noch ein anderes System?

              zum Beispiel OS\2 (zusätzlich zum Slash und vermutlich fast ausgestorben) und SymbianOS (ausschließlich Backslash), siehe verlinkte Seite ;-)

              Freundliche Grüße

              Vinzenz

  2. Hello,

    Hallo,

    ich habe mir aus der Doku von PHP folgendes Script kopiert:

    if (is_writable($filename)) {

    // Wir öffnen $filename im "Anhänge" - Modus.
        // Der Dateizeiger befindet sich am Ende der Datei, und
        // dort wird $somecontent später mit fwrite() geschrieben.
        if (!$handle = fopen($filename, "w+")) {
             print "Kann die Datei $filename nicht öffnen";
             exit;
        }

    // Schreibe $somecontent in die geöffnete Datei.
        if (!fwrite($handle, $anfang)) {
            print "Kann in die Datei $filename nicht schreiben";
            exit;
        }

    print "Head geschrieben... <br />";

    fclose($handle);

    } else {
        print "Die Datei $filename ist nicht schreibbar";
    }

    
    >   
    > Es funktioniert auch soweit, wenn die Datei "$filename"	in meinem Fall test.php existiert. Ist das nicht der Fall wird die Datei auch nicht angelegt. Und das trotz der schreibrechte w+ ? Was mache ich falsch?  
      
    Du fragst vorher, ob die Datei, die noch nicht vorhanden ist, beschrieben werden darf. Das geht natürlich nicht.  
      
    Das Beispiel ist aber sowieso Humbug, da die Prüfung und die Erzeugung in zwei getrennten Schritten vorgenommen werden. PHP hat nun aber endlich alle erforderlichen Öffnungsmodes, die man benötigen könnte. Man muss also keine wilden Konstruktionen mehr selber bauen.  
      
    Siehe <http://de3.php.net/manual/en/function.fopen.php>  
      
    Besonders der Mode 'c' und 'c+' dürfte bei den meisten Anwendungsfällen der passendere sein, als 'w' oder 'w+'. Kommt natürlich auf die Aufgabenstellung an.  
      
      
      
      
      
    Liebe Grüße aus dem schönen Oberharz  
      
      
    Tom vom Berg  
    ![](http://selfhtml.bitworks.de/Virencheck.gif)  
      
    
    -- 
     ☻\_  
    /▌  
    / \ Nur selber lernen macht schlau  
    <http://bergpost.annerschbarrich.de>