PHP 8.4.1 Released!

php://

php://Zugriff auf verschiedene I/O-Streams

Beschreibung

PHP stellt eine Reihe verschiedener I/O-Streams zur Verfügung. Diese ermöglichen den Zugriff auf PHP-eigene Ein- und Ausgabestreams, Dateideskriptoren für Standardeingabe, -ausgabe und -fehler, temporäre Dateistreams im Speicher und auf der Festplatte sowie Filter, die andere Dateiressourcen während des Lesen und Schreibens manipulieren können.

php://stdin, php://stdout und php://stderr

php://stdin, php://stdout und php://stderr ermöglichen den direkten Zugriff auf den entsprechenden Ein- oder Ausgabestream des PHP-Prozesses. Der Stream verweist auf eine Kopie eines Dateideskriptors, d. h. wenn php://stdin geöffnet und später wieder geschlossen wird, wird nur die Kopie des Deskriptors geschlossen - der eigentliche Stream, auf den STDIN verweist, bleibt davon unberührt. Es wird empfohlen, einfach die Konstanten STDIN, STDOUT und STDERR zu verwenden, anstatt die Streams manuell mit diesen Wrappern zu öffnen.

php://stdin ist schreibgeschützt, während php://stdout und php://stderr nur geschrieben werden können.

php://input

php://input ist ein schreibgeschützter Stream, mit dem Rohdaten aus dem Body der Anfrage gelesen werden können. Wenn die Option enable_post_data_reading aktiviert ist, stehtphp://input in POST-Anfragen mit enctype="multipart/form-data" nicht zur Verfügung.

php://output

php://output ist ein nur schreibbarer Stream, mit dem auf die gleiche Weise in den Ausgabepuffer geschrieben werden kann wie mit print und echo.

php://fd

Mit php://fd kann direkt auf den angegebenen Dateideskriptor zugegriffen werden; z. B. verweist php://fd/3 auf den Dateideskriptor 3.

php://memory und php://temp

php://memory und php://temp sind les- und schreibbare Streams, mit denen temporäre Daten in einem dateiähnlichen Wrapper gespeichert werden können. Ein Unterschied zwischen den beiden besteht darin, dass php://memory die Daten immer im Speicher ablegt, während php://temp eine temporäre Datei verwendet, sobald die Menge der gespeicherten Daten eine vordefinierte Grenze (der Standardwert ist 2 MB) erreicht. Der Speicherort dieser temporären Datei wird auf die gleiche Weise ermittelt, wie bei der Funktion sys_get_temp_dir().

Das Speicherlimit von php://temp kann durch Anhängen von /maxmemory:NN festgelegt werden, wobei NNN die maximale Datenmenge in Bytes ist, die im Speicher gehalten werden soll, bevor eine temporäre Datei verwendet wird.

Achtung

Manche PHP-Erweiterungen benötigen einen Standard-IO-Stream und versuchen, einen gegebenen Stream in einen Standard-IO-Stream umzuwandeln. Diese Umwandlung kann bei Speicher-Streams fehlschlagen, da hierfür die C-Funktion fopencookie() verfügbar sein muss. Unter Windows steht diese C-Funktion nicht zur Verfügung.

php://filter

php://filter ist eine Art Meta-Wrapper, mit dem Filter auf einen Stream angewendet werden können, wenn dieser geöffnet wird. Dies ist nützlich bei All-in-One-Dateifunktionen wie readfile(), file() und file_get_contents(), wo es sonst keine Möglichkeit gibt, einen Filter auf den Stream anzuwenden, bevor der Inhalt gelesen wird.

Der Wrapper php://filter akzeptiert die folgenden Parameter als Teil seines Pfades. Es können mehrere Filterketten in einem Pfad angegeben werden. Einzelheiten zur Verwendung dieser Parameter werden in den Beispielen erläutert.

Parameter für php://filter
Name Beschreibung
resource=<zu filternder Stream> Dieser Parameter ist erforderlich; er gibt den Stream an, der gefiltert werden soll.
read=<Liste der Filter, die auf den Lese-Stream angewendet werden sollen> Dieser Parameter ist optional; ein oder mehrere Filternamen, getrennt durch ein Pipe-Zeichen (|).
write=<Liste der Filter, die auf den Schreib-Stream angewendet werden sollen> Dieser Parameter ist optional; ein oder mehrere Filternamen, getrennt durch ein Pipe-Zeichen (|).
<Liste der Filter, die auf beide Streams angewendet werden sollen> Alle Filterlisten, denen kein read= oder write= vorangestellt ist, werden je nach Bedarf sowohl auf den Lese- als auch auf den Schreib-Stream angewendet.

Optionen

Zusammenfassung des Wrappers (für php://filter siehe die Zusammenfassung des Wrappers, der gefiltert wird)
Eigenschaft wird unterstützt
Eingeschränkt durch allow_url_fopen Nein
Eingeschränkt durch allow_url_include Nur php://input, php://stdin, php://memory und php://temp.
Erlaubt Lesen Nur php://stdin, php://input, php://fd, php://memory und php://temp.
Erlaubt Schreiben Nur php://stdout, php://stderr, php://output, php://fd, php://memory und php://temp.
Erlaubt Anfügen Nur php://stdout, php://stderr, php://output, php://fd, php://memory und php://temp (Entspricht dem Schreiben).
Erlaubt gleichzeitiges Lesen und Schreiben Nur php://fd, php://memory und php://temp.
Unterstützt stat() Nein, aber php://memory und php://temp unterstützen fstat().
Unterstützt unlink() Nein
Unterstützt rename() Nein
Unterstützt mkdir() Nein
Unterstützt rmdir() Nein
Unterstützt stream_select() Nur php://stdin, php://stdout, php://stderr, php://fd und php://temp.

Beispiele

Beispiel #1 php://temp/maxmemory

Mit diesem optionalen Parameter kann festgelegt werden, wie viel Speicherplatz php://temp verwenden darf, bevor eine temporäre Datei verwendet wird.

<?php
// Das Limit auf 5 MB setzen.
$fiveMBs = 5 * 1024 * 1024;
$fp = fopen("php://temp/maxmemory:$fiveMBs", 'r+');

fputs($fp, "hello\n");

// Lesen, was geschrieben wurde.
rewind($fp);
echo
stream_get_contents($fp);
?>

Beispiel #2 php://filter/resource=<zu filternder Stream>

Dieser Parameter muss sich am Ende der php://filter-Spezifikation befinden und auf den Stream verweisen, der gefiltert werden soll.

<?php
/* Da keine Filter angegeben werden, entspricht dies einem einfachen
readfile("http://www.example.com"); */

readfile("php://filter/resource=http://www.example.com");
?>

Beispiel #3 php://filter/read=<Liste der Filter, die auf den Lese-Stream angewendet werden sollen>

Dieser Parameter akzeptiert einen oder mehrere Filternamen, die durch das Pipe-Zeichen | getrennt sind.

<?php
/* Dies gibt den Inhalt von www.example.com
komplett in Großbuchstaben aus */
readfile("php://filter/read=string.toupper/resource=http://www.example.com");

/* Dies bewirkt dasselbe wie oben,
aber zusätzlich wird ROT13-kodiert */
readfile("php://filter/read=string.toupper|string.rot13/resource=http://www.example.com");
?>

Beispiel #4 php://filter/write=<Liste der Filter, die auf den Schreib-Stream angewendet werden sollen>

Dieser Parameter akzeptiert einen oder mehrere Filternamen, die durch das Pipe-Zeichen | getrennt sind.

<?php
/* Dies wendet einen rot13-Filter auf die Zeichenkette
"Hello World" an und schreibt sie dann in die Datei
example.txt im aktuellen Verzeichnis */
file_put_contents("php://filter/write=string.rot13/resource=example.txt","Hello World");
?>

Beispiel #5 php://memory und php://temp sind nicht wiederverwendbar

php://memory und php://temp können nicht wiederverwendet werden, d. h. nachdem die Streams geschlossen wurden, kann nicht mehr auf sie zugegriffen werden.

<?php
file_put_contents
('php://memory', 'PHP');
echo
file_get_contents('php://memory'); // gibt nichts aus
add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top