|
fopen
(PHP 4, PHP 5) fopen — Öffnet eine Datei oder URL
Beschreibung
resource fopen
( string $filename
, string $mode
[, bool $use_include_path = false
[, resource $context
]] )
Parameter-Liste
-
filename
-
Hat filename die Form "schema://..."
wird angenommen, dass es sich hier um einen URL handelt und PHP sucht
nach einem Protokollhandler (auch als Wrapper bekannt) für dieses
Schema. Sind keine Wrapper für dieses Protokoll registriert, gibt
PHP als Hilfe zum Verfolgen potentieller Probleme in Ihrem Skript
einen Hinweis aus und setzt dann weiter fort, als wenn
filename eine reguläre Datei spezifiziert.
Ist PHP zu dem Schluss gekommen, dass filename
eine lokale Datei spezifiziert, wird es versuchen, einen Stream
an dieser Datei zu öffnen. Die Datei muss für PHP zugreifbar sein,
weshalb Sie sicherstellen müssen, dass die Dateirechte diesen
Zugriff ermöglichen. Wenn Sie Safe Mode oder
open_basedir aktiviert haben,
können weitere Einschränkungen zutreffen.
Kam PHP zum Schluss, dass es sich bei filename
um ein registriertes Protokoll handelt, und ist dieses Protokoll
als ein Netzwerk URL registriert, prüft PHP, ob
allow_url_fopen aktiviert
ist. Ist es nicht aktiviert, gibt PHP eine Warnung aus, und der
Aufruf von fopen wird scheitern.
Hinweis:
Die Liste der unterstützten Protokolle können Sie unter
Unterstützte Protokolle and Wrappers finden. Einige Protokolle (auch als
Wrapper bezeichnet)
unterstützen context und/oder php.ini Optionen.
Beziehen sie sich auf die jeweilige Seite für das genutzte Potokoll,
um eine Liste der Optionen, die gesetzt werden können, zu erhalten.
(z.B. php.ini Wert user_agent genutzt vom
http Wrapper).
Achten sie darauf, unter Windows alle Backslash-Zeichen, die in Pfaden
genutzt werden, zu maskieren oder nutzen sie Schrägstriche (Slash).
-
mode
-
Der mode Parameter spezifiziert den Zugriffstyp,
den sie auf den Stream anfordern. Es kann einer der folgenden sein:
Eine Liste der möglichen Modi von fopen() mittels
mode
| mode |
Beschreibung |
| 'r' |
Nur zum Lesen geöffnet; platziere Dateizeiger auf Dateianfang.
|
| 'r+' |
Zum Lesen und Schreiben geöffnet; platziere Dateizeiger auf
Dateianfang.
|
| 'w' |
Nur zum Schreiben geöffnet; platziere Dateizeiger auf Dateianfang
und kürze die Datei auf eine Länge von 0. Existiert die Datei
nicht, versuche, diese zu erzeugen.
|
| 'w+' |
Zum Schreiben und Lesen geöffnet; platziere Dateizeiger auf
Dateianfang und kürze die Datei auf eine Länge von 0. Existiert
die Datei nicht, versuche, diese zu erzeugen.
|
| 'a' |
Nur zum Schreiben geöffnet; platziere Dateizeiger auf Dateiende.
Existiert die Datei nicht, versuche, diese zu erzeugen.
|
| 'a+' |
Zum Schreiben und Lesen geöffnet; platziere Dateizeiger auf
Dateiende. Existiert die Datei nicht, versuche, diese zu erzeugen.
|
| 'x' |
Erzeuge und Öffne nur zum Schreiben; platziere Dateizeiger auf
Dateianfang. Falls die Datei schon existiert, wird der
fopen() Aufruf fehlschlagen durch Rückgabe von
FALSE und dem Auslösen eines Fehlers der Stufe
E_WARNING. Existiert die Datei nicht,
versuche, diese zu erzeugen. Dies ist zur Angabe der
O_EXCL|O_CREAT Flags für den darunterliegenden
open(2) System Aufruf äquivalent.
|
| 'x+' |
Erzeuge und Öffne zum Schreiben und Lesen; ansonsten ist das
Verhalten gleich wie bei 'x'.
|
| 'c' |
Öffne Datei nur zum Schreiben. Wenn die Datei nicht existiert,
wird diese erzeugt. Wenn sie existiert, wird sie weder gekürzt (im
Gegensatz zu 'w'), noch schlägt der Aufruf
dieser Funktion fehl (wie dies mit 'x' der Fall
ist). Der Dateizeiger wird auf den Dateianfang platziert. Dies
kann nützlich sein, wenn man eine "beratende" (kooperative) Sperre
erhalten möchte (siehe flock()) bevor man
versucht, die Datei zu ändern, da die Nutzung
von 'w' die Datei kürzen könnte, bevor die
Sperre erhalten wurde (falls Kürzen gewünscht ist, kann
ftruncate() genutzt werden, nachdem die Sperre
angefragt wurde).
|
| 'c+' |
Öffne Datei zum Lesen und Schreiben; ansonsten ist das
Verhalten gleich wie bei 'c'.
|
Hinweis:
Verschiedene Betriebssysteme haben unterschiedliche Zeilenende
Konventionen. Wenn sie eine Text Datei schreiben und einen
Zeilenumbruch einfügen möchten, müssen sie das/die korrekte(n)
Zeilenende Zeichen für ihr Betriebssystem nutzen. Unix basierte
Systeme nutzen \n als Zeilenende Zeichen, Windows
basierte Systeme nutzen \r\n als Zeilenende Zeichen
und Macintosh basierte Systeme nutzen \r als
Zeilenende Zeichen.
Wenn sie die falschen Zeilenende Zeichen beim Schreiben ihrer Dateien
nutzen, kann es sein, dass andere Anwendungen, die diese Dateien
öffnen, "seltsam aussehen".
Windows bietet einen Text-Mode translations Flag
('t') an, der transparent \n zu
\r\n übersetzt, wenn mit der Datei gearbeitet wird.
Andererseits können sie auch 'b' nutzen, um
Binärmode zu erzwingen, der ihre Daten nicht übersetzt. Um diese Flags
zu nutzen, geben sie entweder 'b'
oder 't' als das letzte Zeichen des
mode Parameters an.
Der Standard Übersetzungsmodus hängt von der SAPI und der PHP Version
ab, die sie nutzen, daher ist es empfehlenswert, immer den passenden
Flag aus Portabilitätsgründen anzugeben. Sie
sollten 't' Modus nutzen, wenn sie mit Textdateien
arbeiten und sie nutzen \n um die Zeilenenden im
Skript zu begrenzen, erwarten aber, dass ihre Dateien mit Anwendungen
wie etwa Notepad lesbar sind. Ansonsten sollten
sie 'b' nutzen.
Wenn sie beim Arbeiten mit binären Dateien nicht das 'b' Flag angeben,
können sie seltsame Probleme mit ihren Daten erleben, einschließlich
zerstörter Bild Dateien und merkwürdiger Probleme mit
\r\n Zeichen.
Hinweis:
Aus Portabilitätsgründen wird dringend empfohlen, dass sie immer das
'b' Flag nutzen, wenn sie Dateien mit fopen()
öffnen.
Hinweis:
Außerdem wird aus Gründen der Portabilität dringend empfohlen, dass
sie Code umschreiben, der den 't' Modus nutzt oder
sich darauf verlässt, so dass die korrekten Zeilenendungen und der
'b' Modus stattdessen genutzt werden.
-
use_include_path
-
Der optionale dritte Parameter use_include_path
kann auf '1' oder TRUE gesetzt werden, wenn sie wollen, dass nach der
Datei auch im include_path
gesucht wird.
-
context
-
Hinweis: Die Kontext-Unterstützung gibt
es seit PHP 5.0.0. Eine Beschreibung von Kontexten finden
Sie unter Stream Funktionen.
Rückgabewerte
Gibt bei Erfolg eine Dateizeiger Ressource zurück oder FALSE bei Fehlern.
Fehler/Exceptions
Wenn das Öffnen fehlschlägt, wird ein Fehler der Stufe
E_WARNING erzeugt. Sie können @ um diese Warnung zu
unterdrücken.
Beispiele
Beispiel #1 fopen() Beispiele
<?php $handle = fopen("/home/rasmus/file.txt", "r"); $handle = fopen("/home/rasmus/file.gif", "wb"); $handle = fopen("http://www.example.com/", "r"); $handle = fopen("ftp://user:password@example.com/somefile.txt", "w"); ?>
Anmerkungen
WarnungBei SSL-Verbindungen zusammen
mit Microsoft IIS hält sich dieser Webserver nicht an das Protokoll und
schließt die Verbindung ohne ein close_notify zu senden.
PHP quittiert dieses Fehlverhalten mit "SSL: Fatal Protocol Error", wenn das
Ende der Daten erreicht ist. Eine mögliche Lösung besteht darin, den Level von
error_reporting herabzusetzten und
Warnings auszuschließen. Ab PHP 4.3.7 kann PHP fehlerhafte IIS-Serversoftware
erkennen, wenn Sie einen Stream mit dem https://-Wrapper öffnen,
und unterdrückt die Warnung für Sie. Falls Sie fsockopen()
benutzen, um einen ssl://-Socket zu öffnen, müssen Sie selbst
dafür Sorge tragen, die Warnung zu erkennen und diese zu unterdrücken.
Hinweis: Wenn Safe Mode aktiviert ist überprüft PHP, ob
das Arbeitsverzeichnis, die gleiche UID (Eigentümer) hat wie das Skript
selbst.
Wenn sie Probleme beim Lesen und Schrieben von Dateien haben und sie nutzen
die Server Modul Version von PHP, denken sie daran, sicherzustellen, dass
die Dateien und Verzeichnisse, die sie nutzen, für den Server Prozess
zugänglich sind.
|