"fopen" geht nicht
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
ahne
argument
befehl
code
datei
entsprechend code
fehler
file
funktionieren
http
index
klein konvention
meldung
not
quellcode
schau
unbekannter fehler
waldorf
wirbel
zugriffsrecht
-
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? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Da wir ja wissen wie der COde aussieht können wir dir natürlich sofort helfen!
[ironie_mod=off] -
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 -
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
-
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 -
Verschoben nach 'PHP & MySQL'
-
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....
-
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... -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage