fwrite funktioniert nicht...
Chris
- php
0 MudGuard0 Chris
0 Axel Richter0 MudGuard
Hallo
Ich öffne mit fopen eine Datei und möchte anschliessend Daten darin speichern. Unten aufgeführt seht ihr ein Beispiel. Die Datei savetest.htm wird geöffnet. Nun möchte ich die Variable $text bzw. ein Teil davon (d.h. die ersten 11 Buchstaben [Dieser Text]) speichern. Dafür benutze ich fwrite. Anschliessend wird die Datei wieder geschlossen, wieder neu geöffnet und der neue Inhalt ausgegeben. Doch leider befinden sich immer noch die ursprünglichen Daten in der Datei savetest.htm obwohl das Script während der Ausführung keinen Fehler meldet. Kann mir jemand verraten wo der Fehler liegt?
Hier der Code:
<?php
$url = "http://localhost/webgenerator/version2/fopen/savetest.htm";
$text = "Dieser Text wird gespeichert";
$fp = fopen ($url,"w");
fwrite($fp,$text,11);
fclose($fp);
$fp = fopen ($url,"r");
$str = fgets($fp,30);
fclose($fp);
echo $str;
?>
Danke für eure Vorschläge!
Gruss Chris
Hallo
Hi,
Ich öffne mit fopen eine Datei und möchte anschliessend Daten darin speichern. Unten aufgeführt seht ihr ein Beispiel. Die Datei savetest.htm wird geöffnet. Nun möchte ich die Variable $text bzw. ein Teil davon (d.h. die ersten 11 Buchstaben [Dieser Text]) speichern. Dafür benutze ich fwrite. Anschliessend wird die Datei wieder geschlossen, wieder neu geöffnet und der neue Inhalt ausgegeben. Doch leider befinden sich immer noch die ursprünglichen Daten in der Datei savetest.htm obwohl das Script während der Ausführung keinen Fehler meldet. Kann mir jemand verraten wo der Fehler liegt?
http kennt keine Dateien, sondern nur ressourcen.
PHP schmeißt das leider zusammen.
Aber wenn Du die Doku zu fopen gelesen hättest, hättest Du auch diese Zeilen gelesen:
Zitat 1:
If filename begins with "http://" (not case sensitive), an HTTP 1.0 connection is opened to the specified server, the page is requested using the HTTP GET method, and a file pointer is returned to the beginning of the body of the response. A 'Host:' header is sent with the request in order to handle name-based virtual hosts.
Mit GET kann man keine Dateien schreiben.
Daher auch Zitat 2:
HTTP connections are read-only; you cannot write data or copy files to an HTTP resource.
Andreas
Hmm dass ich da nicht selbst darauf gekommen bin?! Wäre ja etwas gar einfach Daten auf einem fremden Server zu verändern:-) Doch gibt es eine Möglichkeit trotzdem irgendwie Daten auf einem fremden Server zu speichern wenn ich im Besitz der Zugangsdaten (login, passwort) bin?
Hmm dass ich da nicht selbst darauf gekommen bin?! Wäre ja etwas gar einfach Daten auf einem fremden Server zu verändern:-) Doch gibt es eine Möglichkeit trotzdem irgendwie Daten auf einem fremden Server zu speichern wenn ich im Besitz der Zugangsdaten (login, passwort) bin?
ftp, http-PUT ...
Andreas
Hallo,
Hmm dass ich da nicht selbst darauf gekommen bin?! Wäre ja etwas gar einfach Daten auf einem fremden Server zu verändern:-) Doch gibt es eine Möglichkeit trotzdem irgendwie Daten auf einem fremden Server zu speichern wenn ich im Besitz der Zugangsdaten (login, passwort) bin?
Ja, am einfachsten geht das wohl über FTP (welches von PHP unterstützt wird: http://www.php.net/manual/en/ref.ftp.php)
Grüße,
Christian
Hallo
folgendes ist, nach meiner Meinung, der Grund:
<?php
$url = "http://localhost/webgenerator/version2/fopen/savetest.htm";
Über das Protokoll http kann eine Datei-Ressource nur angefordert werden. Das heißt in einen temporären Speicher geholt, zum Lesen.
$text = "Dieser Text wird gespeichert";
$fp = fopen ($url,"w");
Der Filepointer weist auf die temporäre Datei.
fwrite($fp,$text,11);
fwrite schreibt in die temporäre Datei.
fclose($fp);
$fp = fopen ($url,"r");
Hier wird die (unveränderte) Datei wieder von der URL angefordert.
$str = fgets($fp,30);
fclose($fp);
echo $str;
?>
Du musst die Datei direkt auf den lokalen Dateisystem öffnen.
Gruß
Axel
Hi,
Über das Protokoll http kann eine Datei-Ressource nur angefordert werden.
Falsch. http unterstützt durchaus das Speichern von Ressourcen. Es gibt sogar eine eigene Methode dafür: PUT
Aber PHP unterstützt bei fopen mit http nur GET.
Andreas