fopen() existiert Datei schon?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • fopen() existiert Datei schon?

    Hi,

    momentan versuche ich mich am Lesen und Schreiben von Dateien.

    Ich möchte in eine Datei test.txt eine Zahl schreiben. Wenn dort
    bereits eine Zahl enthalten ist, möchte ich diese mit addieren.

    Dies klappt zwar, aber ich erhalte eine unschöne Warnmeldung,
    da ich versuche die Datei zum Lesen zu öffnen, ehe sie überhaupt
    existiert...(beim erstmaligen Aufruf).

    Nun frag ich mich, wie ich rausbekomme, ob es die Datei überhaupt schon gibt.
    Denn ich möchte sowas gerne vermeiden:

    PHP-Code:
    fopen(test.txt) [<a href='function.fopen'>function.fopen</a>]: failed to open streamDatei oder Verzeichnis nicht gefunden in... 
    Code:

    PHP-Code:
    $datei fopen("test.txt","r+");

    if(
    $datei)//ich dachte hier wird geprüft ob es die Datei überhaupt gibt?!
    {
    $ausdatei fgets($datei10);
    fclose($datei);
    }

    //....

    $fp fopen("test.txt","w+");

    if(
    $fp)
    {
    fwrite($fp$saver);
    }
    fclose($fp); 

  • #2
    öffne die Datei zum Lesen auch mit w+ dann bekommst du kein Warnings

    Kommentar


    • #3
      Re: fopen() existiert Datei schon?

      Original geschrieben von unicoder
      PHP-Code:
      $datei fopen("test.txt","r+");

      if(
      $datei)//ich dachte hier wird geprüft ob es die Datei überhaupt gibt?! 
      mit if($datei) wird der wahrheitswert von $datei geprüft, also ob fopen() erfolgreich war (resource).
      der fehler wird aber schon bei fopen() generiert, also musst du diesen abfangen.

      dirty: fehlermeldung mit @fopen("test.txt","r+"); unterdrücken.

      sauber: vorher mit is_file(("test.txt") und eventuell noch mit is_readable(("test.txt") überprüfen, ob die datei vorhanden ist und ggf. diese anlegen.

      alternativ gleich im modus '+w' öffnen, wobei es da auch rechteprobleme geben könnte.

      Kommentar


      • #4
        Danke für die schnelle Antwort!

        Wenn ich nun auf w+ setze, laufe ich aber Gefahr, dass eine evtl.
        bereits enthaltene Zahl in der Datei überschrieben wird.

        Zumindest beim zweiten Aufruf, da dort ja wieder gnadenlos mit
        w+ meine Zahl die zuvor gesetzt wurde gelöscht wird.

        Um es etwas klarer zu machen (ist schon zu spät für mich *g*):

        1. Ich versuche die txt zu öffnen und die Zahl darin zu lesen.
        2. Ich addiere zu der evtl. vorhandenen Zahl eine neue hinzu.
        3. Die neu aufaddierte Zahl wird wieder in die Datei geschrieben.
        4. In der Datei ist nur eine Zahl enthalten.

        Mit w+ würde ich aber immer nur die aktuelle Zahl reinschreiben,
        da der Dateizeiger auf den Anfang gesetzt und die Länge der bestehenden Datei auf 0 Byte gelegt wird.

        Sehe ich das richtig?

        Kommentar


        • #5
          file_exists() + is_writable()

          Kommentar

          Lädt...
          X