Maison  >  Article  >  développement back-end  >  Protocoles spéciaux en php, explication détaillée du protocole php://

Protocoles spéciaux en php, explication détaillée du protocole php://

墨辰丷
墨辰丷original
2018-05-15 17:48:282607parcourir

Cet article présente principalement les protocoles spéciaux en php, le protocole php:// est détaillé, les amis intéressés peuvent en savoir plus.

php://Accéder à divers flux d'entrée/sortie (flux d'E/S)


Description


PHP fournit divers flux d'entrée/sortie (IO), permettant d'accéder aux flux d'entrée et de sortie de PHP, aux entrées et sorties standard et aux descripteurs d'erreurs, en mémoire, et sauvegardes de disque Flux de fichiers temporaires et filtres pouvant fonctionner sur d'autres ressources de fichiers en lecture et en écriture.


php://stdin, php://stdout et php://stderr


, et autorisé accès direct Le flux d'entrée ou de sortie correspondant du processus PHP. Le flux de données fait référence au descripteur de fichier copié, donc si vous l'ouvrez puis le fermez, En désactivant simplement la copie, le STDIN réellement référencé ne sera pas affecté. Notez que le comportement de PHP dans ce domaine était bogué jusqu'à PHP 5.2.1. Il est recommandé d'utiliser simplement les constantes STDIN, STDOUT et STDERR au lieu d'ouvrir ces wrappers manuellement.

est en lecture seule et en écriture seule.


php://input


est un flux en lecture seule qui peut accéder aux données brutes demandées. Dans le cas des requêtes POST, il est préférable d'utiliser à la place de , car il ne repose pas sur une directive spécifique. De plus, dans ce cas, il n’y a pas de remplissage par défaut. Nécessite potentiellement moins de mémoire que l’activation de always_populate_raw_post_data. enctype="multipart/form-data" n'est pas valide.

Remarque : Le flux de données ouvert ne peut être lu qu'une seule fois ; Les flux de données ne prennent pas en charge les opérations de recherche. Cependant, en fonction de la mise en œuvre de SAPI, lorsque les données du corps de la requête sont enregistrées, il peut ouvrir un autre flux de données et le relire. En règle générale, cela n'est le cas que pour les requêtes POST, pas pour les autres méthodes de requête telles que PUT ou PROPFIND.


php://output


est un flux de données en écriture seule. Permet d'imprimer de la même manière que écho Écrivez dans le tampon de sortie.


php://fd


Permet un accès direct au descripteur de fichier spécifié. Par exemple, fait référence au descripteur de fichier 3.


php://memory et php://temp


et est un fichier similaire Un wrapper pour les flux de données qui permet de lire et d'écrire des données temporaires. La seule différence entre les deux est que les données sont toujours stockées en mémoire, tandis qu'elles seront supprimées une fois que la quantité de mémoire atteint une limite prédéfinie (la valeur par défaut est 2 Mo) est stocké dans un fichier temporaire. L'emplacement du fichier temporaire est déterminé de la même manière que sys_get_temp_dir().

La limite de mémoire de

peut être contrôlée en ajoutant /maxmemory:NN est la quantité maximale de données conservées en mémoire en octets. Si elle dépasse, les fichiers temporaires seront utilisés.


php://filter


est un méta-wrapper, Conçu pour filtrer les applications lorsqu'un flux de données est ouvert. Ceci est utile pour les fonctions de fichier tout-en-un comme readfile(), file() et file_get_contents(), Il n'est pas possible d'appliquer des filtres supplémentaires avant la lecture du contenu du flux de données.

La cible utilise les paramètres suivants dans le cadre de son chemin. Des chaînes de filtres composites peuvent être spécifiées sur un chemin. Pour une utilisation détaillée de ces paramètres, veuillez vous référer à des exemples spécifiques.

php://paramètres de filtre
php://filter 参数
名称 描述
resource=42617adde19ea23d35a6d030bf3614c9 这个参数是必须的。它指定了你要筛选过滤的数据流。
read=a70e0717f5bf907d1d01d15c88b07fa4 该参数可选。可以设定一个或多个过滤器名称,以管道符(|)分隔。
write=901dd5a2bf80d6ba3575d2b297b76956 该参数可选。可以设定一个或多个过滤器名称,以管道符(|)分隔。
303bffd13872b337910611675bdd821f 任何没有以 read= 或 write= 作前缀 的筛选器列表会视情况应用于读或写链。
Nom Description
resource=c119d2437ad22d954d390b5b6e078a68 Ceci Le paramètre est obligatoire. Il spécifie le flux de données que vous souhaitez filtrer.
read=1b0f7c452e223403537a0fb674d056ab Ce paramètre est facultatif. Vous pouvez définir un ou plusieurs noms de filtre, séparés par des barres verticales (|).
write=00268053242e1ef3fdb4841ab0ed41c6 Ce paramètre est facultatif. Vous pouvez définir un ou plusieurs noms de filtre, séparés par des barres verticales (|).
475361bc4a0411676ab5d8f857d50fe8 Toute liste de filtres non préfixée par read= ou write= sera appliquée à la chaîne de lecture ou d'écriture, selon le cas.


Facultatif

封装协议摘要(针对 php://filter,参考被筛选的封装器。)
属性 支持
首先于 allow_url_fopen No
首先于 allow_url_include 仅 php://input、 php://stdin、 php://memory 和 php://temp。
允许读取 仅 php://stdin、 php://input、 php://fd、 php://memory 和 php://temp。
允许写入 仅 php://stdout、 php://stderr、 php://output、 php://fd、 php://memory 和 php://temp。
允许追加 仅 php://stdout、 php://stderr、 php://output、 php://fd、 php://memory 和 php://temp(等于写入)
允许同时读写 仅 php://fd、 php://memory 和 php://temp。
支持 stat() 仅 php://memory 和 php://temp。
支持 unlink() No
支持 rename() No
支持 mkdir() No
支持 rmdir() No
仅仅支持 stream_select() php://stdin、 php://stdout、 php://stderr、 php://fd 和 php://temp。



Journal de mise à jour

版本 说明
5.3.6 增加 。
5.1.0 增加  和 。
5.0.0 增加 。



Exemple



Exemple n°1 php://temp/maxmemory


Cette option facultative permet de définir la limite maximale de mémoire avant de commencer à utiliser des fichiers temporaires.

<?php
// Set the limit to 5 MB.
$fiveMBs = 5 * 1024 * 1024;
$fp = fopen("php://temp/maxmemory:$fiveMBs", &#39;r+&#39;);

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

// Read what we have written.
rewind($fp);
echo stream_get_contents($fp);
?>
<code style="font-family:'Fira Mono', 'Source Code Pro', monospace;display:block;"><br>

Exemple n°2 php://filter/resource=c119d2437ad22d954d390b5b6e078a68


Ce paramètre doit être situé à la fin et pointer vers le flux de données qui doit être filtré.


<?php
/* 这简单等同于:  
readfile("http://www.example.com");  
实际上没有指定过滤器 
*/readfile("php://filter/resource= 
?>

Exemple n°3 php://filter/read=7d80f8036a912af4da05f950856cb1a1


Ce paramètre prend un ou plusieurs noms de filtre séparés par le caractère barre verticale |


<?php
/* 这会以大写字母输出 www.example.com 的全部内容 */
readfile
(
"php://filter/read=string.toupper/resource=http://www.example.com"
);
/* 这会和以上所做的一样,但还会用 ROT13 加密。 */
readfile
(
"php://filter/read=string.toupper|string.rot13/resource=http://www.example.com"
);
?>
<span style="couleur:rgb(0,0,0);"><span style="color:rgb(0,0,187);"></span></span><code style="font-family:'Fira Mono', 'Source Code Pro', monospace;display:block;"><span style="color:rgb(0,0,0);"><span style="color:rgb(0,0,187);"></span></span><br>


Exemple n°4 php://filter/write=9fd3b825de7e0fdece15060ee66ae828


Ce paramètre prend un ou plusieurs noms de filtre séparés par le caractère barre verticale |


<?php
/* 这会通过 rot13 过滤器筛选出字符 "Hello World"
  然后写入当前目录下的 example.txt */
file_put_contents
(
"php://filter/write=string.rot13/resource=example.txt"
,
"Hello World"
);
?>
<span style="couleur:rgb(0,0,0);"><span style="color:rgb(0,0,187);"></span></span><code style="font-family:'Fira Mono', 'Source Code Pro', monospace;display:block;"><span style="color:rgb(0,0,0);"><span style="color:rgb(0,0,187);"></span></span><br>

Recommandations associées :

Paramètres de demande de publication du protocole HTTP en PHP, demande de publication du protocole php_Tutoriel PHP

Paramètres de demande de publication du protocole HTTP en PHP, demande de publication du protocole php

La soumission de la publication php apparaît Les variables d'entrée ont dépassé 1000

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn