php://stdin, php://stdout et php://stderr donnent un accès direct au flux correspondants d'entrée ou de sortie du processus PHP. Le flux représente un descripteur dupliqué du fichier, donc, si vous ouvrez php://stdin et que vous le fermez plus tard, vous fermez uniquement le descripteur, le flux référencé par STDIN ne sera pas affecté. Notez que le comportement de PHP à ce sujet est relativement instable dans les versions antérieures à 5.2.1. Il est recommandé d'utiliser simplement les constantes STDIN, STDOUT et STDERR au lieu d'ouvrir manuellement les flux en utilisant ces gestionnaires.
php://output vous permet d'écrire dans le buffer de sortie, de la même manière que print() et echo().
php://input permet de lire les données brutes de la requête. Pour les requêtes POST, cette méthode est préférable à $HTTP_RAW_POST_DATA car elle ne dépend pas d'une directive de php.ini. De plus, cette solution est moins consomatrice en mémoire que l'activation de $HTTP_RAW_POST_DATA via la directive always_populate_raw_post_data. php://input n'est pas disponible avec enctype="multipart/form-data".
Note: Un flux ouvert au moyen de php://input ne peut être lu qu'une seule fois, le flux ne supporte pas les opérations de déplacement. En revanche, en fonction de la SAPI considérée, il peut être possible de réouvrir un deuxième flux sur php://input et recommencer la lecture. Ceci n'est possible que si le corps de la requête a été sauvegardé. C'est le cas typiquement pour les requêtes de type POST mais pas pour celles d'autres types comme PUT ou PROPFIND.
php://stdin et php://input sont en lecture seule, tandis que php://stdout, php://stderr et php://output sont en écriture seule.
php://filter est une sorte de méta-gestionnaire, prévu pour qui permet l'utilisation de filtre avec les données d'entrée au moment du démarrage du script. C'est pratique avec des fonctions compactes comme readfile(), file() et file_get_contents() où il n'y a pas d'opportunité d'appliquer un filtre aux données lues.
Le gestionnaire de php://filter prend les 'paramètres' suivants dans le 'chemin'.
/resource=<flux à filtrer> (obligatoire) Ce paramètre doit être situé à la fin de votre chaîne php://filter et doit pointer sur le flux à filtrer.
Exemple #1 php:// et les filtres
<?php
/* Ceci est l'équivalent de :
readfile("http://www.example.com");
puisque aucun filtre n'est spécifié */
readfile("php://filter/resource=http://www.example.com");
?>
/read=<liste de filtres de la chaîne de lecture> (optionnel) Ce paramètre prend un ou plusieurs noms de filtres, séparés par le caractère pipe |.
Exemple #2 php:// et filtres de lecture
<?php
/* Cette ligne va afficher le contenu de
www.example.com tout en majuscule */
readfile("php://filter/read=string.toupper/resource=http://www.example.com");
/* Cela va faire la même chose que ci-dessus, mais en plus,
le résultat sera chiffré en ROT13 */
readfile("php://filter/read=string.toupper|string.rot13/resource=http://www.example.com");
?>
/write=<liste de filtres de la chaîne d'écriture> (optionnel) Ce paramètre prend un ou plusieurs noms de filtres, séparés par le caractère pipe |.
Exemple #3 php:// et filtres d'écritures
<?php
/* Cette ligne va filtrer la chaîne "Bonjour le monde"
avec le filtre rot13, puis écrire le résultat dans
le fichier exemple.txt du dossier courant */
file_put_contents("php://filter/write=string.rot13/resource=exemple.txt","Bonjour le monde");
?>
Le gestionnaire php://memory stocke les données en mémoire. php://temp fonctionne de la même façon, mais utilise des fichiers temporaires pour stocker les données lorsqu'une certaine limite mémoire est atteinte (par défaut, 2 Mo).
Le gestionnaire php://temp prend les paramètres suivants, qui sont les parties du chemin :
/maxmemory:<nombre d'octets> (optionnel). Ce paramètre permet de changer la valeur de la limite mémoire (lorsque les données sont déplacées vers un fichier temporaire).
<?php
$fiveMBs = 5 * 1024 * 1024;
$fp = fopen("php://temp/maxmemory:$fiveMBs", 'r+');
fputs($fp, "Bonjour\n");
// lecture de ce que nous avons écrit
rewind($fp);
echo stream_get_contents($fp);
?>
Attribut | Supporté |
---|---|
Limité par allow_url_fopen | Non |
Limité par allow_url_include | php://input, php://stdin, php://memory et php://temp uniquement. |
Autorisé en lecture | php://stdin, php://input, php://memory et php://temp uniquement. |
Autorisé en écriture | php://stdout, php://stderr, php://output, php://memory et php://temp uniquement. |
Autorisé en ajout | php://stdout, php://stderr, php://output, php://memory et php://temp uniquement. (Equivalent à écrire) |
Autorisé en lecture et écriture | php://memory et php://temp uniquement. |
Supporte stat() | php://memory et php://temp uniquement. |
Supporte unlink() | Non |
Supporte rename() | Non |
Supporte mkdir() | Non |
Supporte rmdir() | Non |
Supporte stream_select() | php://stdin, php://stdout, php://stderr et php://temp. |