kostenloser Webspace werbefrei: lima-city


"fopen" geht nicht

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    waldorf

    waldorf hat kostenlosen Webspace.

    Hallo, ich bin blutiger Anfänger im Web-Programmieren und hab
    gleich mal ne Frage:

    Die Befehle "fopen", "fwrite" und "fclose" funktionieren nicht im
    Skript der Datei "index.php".
    Zugegriffen werden soll auf die Datei "counter.txt".
    Beide Dateien habe ich per Filemanager hochgeladen.

    Es wird dann die Meldung gezeigt:
    "supplied argument is not a valid stream resource"

    Es stimmt also was mit der Verzeichnisstruktur nicht.
    Wie geht es richtig?
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Da wir ja wissen wie der COde aussieht können wir dir natürlich sofort helfen!
    [ironie_mod=off]
  4. s********r

    Poste doch Mal den Quellcode... Hast du zudem die Zugriffsrechte der Datei 'counter.txt' auf 0777 gesetzt? (Kannst du im Filemanager unter CHMOD machen). Schau dir doch auch einmal diese Seite hier an: http://de.php.net/fopen - dann kannst du überprüfen, ob du den Code richtig anwendest.

    MfG

    sebigisler

  5. Die Befehle "fopen", "fwrite" und "fclose" funktionieren nicht im
    Skript der Datei "index.php".
    Zugegriffen werden soll auf die Datei "counter.txt".
    Beide Dateien habe ich per Filemanager hochgeladen.

    Es wird dann die Meldung gezeigt:
    "supplied argument is not a valid stream resource"

    Dieser Fehler kommt nicht von fopen(), sondern von einer der nachfolgenden Funktionen. Im einfachsten Fall hast du beim Variablen-Namen des Rückgabewertes von fopen() nur einen Tippfehler gemacht.


    Es stimmt also was mit der Verzeichnisstruktur nicht.

    Das hat damit meist nichts zu tun. Ob eine Datei auch wirklich existiert (also im Verzeichnisbaum an der richtigen Stelle steht), kannst du mit file_exists() prüfen.

    Wie geht es richtig?

    Prüfe immer(!!!) die Rückgabewerte und reagiere entsprechend.

    $file = 'Pfad/Name-der-Datei';
    $open_mode = 'rb+';
    if (FALSE === $fh = fopen($file, $open_mode)) {
      if (!file_exists($file)) {
        $error = 'Datei existiert nicht.';
      }
      elseif (!is_file($file)) {
        $error = 'Dateisystemeintrag ist keine Datei.';
      }
      // weitere Fehlerursachen ermitteln
      // ...
      //
      else {
        $error = 'Unbekannter Fehler.';
      }
      die(sprintf('Fehler beim Öffnen von "%s": %s', $file, $error));
    }
    // ... $data ist das was du in die Datei schreiben möchtest
    $bytes_to_write = strlen($data);
    if ($bytes_to_write !== fwrite($fh, $data, $bytes_to_write) {
      fclose($fh);
      die ('Fehler beim Schreiben!');
    }
    fclose($fh);


    ... und wenn du in Dateien schreibst, solltest du dich unbedingt mit dem Thema Filelocking befassen:
    http://de.php.net/manual/de/function.flock.php



  6. Autor dieses Themas

    waldorf

    waldorf hat kostenlosen Webspace.


    Poste doch Mal den Quellcode... Hast du zudem die Zugriffsrechte der Datei 'counter.txt' auf 0777 gesetzt? (Kannst du im Filemanager unter CHMOD machen). Schau dir doch auch einmal diese Seite hier an: http://de.php.net/fopen - dann kannst du überprüfen, ob du den Code richtig anwendest.

    MfG

    sebigisler


    So, erst mal schönen Dank für die vielen Tipps.
    Ich glaub, ich ahne, woran es scheitert.

    Ich geb mal nen Auszug aus dem Skript wieder, und zwar wird
    da mit Variablen gearbeitet (hab ich so übernommen, stammt nicht von mir:)

    Es soll zunächst im Fall, dass counter.txt nicht existiert, eine
    solche Datei angelegt werden:
    <? 
    $datei_name = "counter.txt";
    if (!file_exists ($datei_name)) {
    $dz = fopen ($datei_name, "W");
    fwrite ($dz, "1");
    fclose ($dz);
    }?>


    Es taucht in dem Skript aber gar keine Pfadangabe auf, ist das das Problem?

    Beitrag geändert: 30.8.2008 11:18:12 von waldorf


    Beitrag geändert: 30.8.2008 11:21:35 von waldorf


    Beitrag geändert: 30.8.2008 11:24:08 von waldorf
  7. m**********r

    Verschoben nach 'PHP & MySQL'

  8. Es soll zunächst im Fall, dass counter.txt nicht existiert, eine
    solche Datei angelegt werden:
    <?php 
    $datei_name = "counter.txt";
    if (!file_exists ($datei_name)) {
    $dz = fopen ($datei_name, "W");
    fwrite ($dz, "1");
    fclose ($dz);
    }?>



    Schreibe das w für write bei fopen bitte mal klein, Konvention, die auch zu Fehlern führen kann....

  9. Autor dieses Themas

    waldorf

    waldorf hat kostenlosen Webspace.



    Es soll zunächst im Fall, dass counter.txt nicht existiert, eine
    solche Datei angelegt werden:
    <?php 
    $datei_name = "counter.txt";
    if (!file_exists ($datei_name)) {
    $dz = fopen ($datei_name, "W");
    fwrite ($dz, "1");
    fclose ($dz);
    }?>



    Schreibe das w für write bei fopen bitte mal klein, Konvention, die auch zu Fehlern führen kann....




    BINGO! Das war die Lösung. "W" muss klein geschrieben werden.
    Nun funktioniert es, hehe. Immer dieser Feinheiten.
    Noch mal danke an alle und sorry für den Wirbel, den
    ich gemacht habe...;-)
  10. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!