Du bist hier: Tips » Scripte » PHP
PHP
Referenzliste

fopen

Dateisystem-Funktionen

    Befehl:
resource fopen ( string $filename , string $mode [, bool $use_include_path = false [, resource $context ]] )


    Parameter-Liste:
NameBeschreibung
filenameHat 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).

<?php
$handle 
fopen("c:\\verzeichnis\\ressource.txt""r");
?>
modeDer 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
modeBeschreibung
'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, einschliesslich 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:
Ausserdem 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_pathDer 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 Streams.

    Rückgabewerte:
Gibt bei Erfolg eine Dateizeiger Ressource zurück oder FALSE bei Fehlern.

    Beschreibung:
Mit fopen() kann man eine Datei (filename) öffnen.


Folgende Werte gibt es:

• a Öffnet die angegebene Datei nur zum Schreiben und positioniert den Dateizeiger auf das Ende der Datei. Sollte die angegebene Datei nicht existieren, so wird versucht sie anzulegen.

• a+ Öffnet die angegebene Datei zum Lesen und Schreiben und positioniert den Dateizeiger auf das Ende der Datei. Sollte die angegebene Datei nicht existieren, so wird versucht sie anzulegen.

• r Öffnet die angegebene Datei zum Lesen und positioniert den Dateizeiger auf den Anfang der Datei.

• r+ Öffnet die angegebene Datei zum Lesen und Schreiben und positioniert den Dateizeiger auf den Anfang der Datei.

• w Öffnet die angegebene Datei zum Schreiben und positioniert den Dateizeiger auf den Anfang der Datei. Die Länge der Datei wird auf 0 Byte gesetzt. Sollte die angegebene Datei nicht existieren, so wird versucht sie anzulegen.

• w+ Öffnet die angegebene Datei zum Lesen und Schreiben und positioniert den Dateizeiger auf den Anfang der Datei. Sollte die angegebene Datei nicht existieren, so wird versucht sie anzulegen.

•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.


    Aktiv in Version:
(PHP 4, PHP 5, PHP 7)

    Hinweis:
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.

    Fehler:
Wenn das Öffnen fehlschlägt, wird ein Fehler der Stufe E_WARNING erzeugt. Sie können @ um diese Warnung zu unterdrücken.

    Warnung:
Warnung:

Bei SSL-Verbindungen zusammen mit Microsoft IIS hält sich dieser Webserver nicht an das Protokoll und schliesst 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 auszuschliessen. 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.


    Siehe auch:
Schliesst einen offenen Dateizeiger
 
•  fgets()
Liest eine Zeile von der Position des Dateizeigers
 
•  fread()
Liest Binärdaten aus einer Datei
 
Schreibt Binärdaten in eine Datei
 
Stellt eine Internet- oder Unix-Domain-Socket-Verbindung her
 
•  file()
Liest eine komplette Datei in ein Array
 
Prüft, ob eine Datei oder ein Verzeichnis existiert
 
Prüft, ob eine Datei existiert und lesbar ist
 
Setzen Sie Zeitlimits auf einem Stream
 
•  popen()
Öffnet einen Prozesszeiger
 
Erstellt einen Stream Kontext
 
•  umask()
Ändert die aktuelle umask
 

fopen() - Beispiel:



Eingabe:
<?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");
?>


Beschreibung:
Version Beschreibung
4.3.2 Seit PHP 4.3.2 ist der Standard Modus auf binär für alle Plattformen, die zwischen binärem und Text Modus unterscheiden, gesetzt. Wenn sie Probleme mit ihren Skripten nach einem Upgrade haben, versuchen sie als Übergangslösung das 't' Flag zu nutzen bis sie ihr Skript wie zuvor beschrieben portabler umgeschrieben haben.
4.3.2 Die 'x' und 'x+' Optionen wurden hinzugefügt.
5.2.6 Die 'c' und 'c+' Optionen wurden hinzugefügt.
Dateisystem-Funktionen