Maison >développement back-end >tutoriel php >Connaissance de base des flux en PHP

Connaissance de base des flux en PHP

墨辰丷
墨辰丷original
2018-06-09 10:17:001472parcourir

Cet article présente principalement les connaissances de base des flux PHP. Les amis intéressés peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Présentation

Les flux sont une fonctionnalité introduite dans PHP 4.3, principalement pour unifier les méthodes de travail des fichiers, sockets et autres ressources similaires. PHP 4.3 existe depuis longtemps, mais de nombreux programmeurs semblent incapables d'utiliser correctement les flux en PHP, y compris moi bien sûr. J'ai déjà rencontré l'utilisation de flux dans certains programmes, comme php://input, mais je n'ai jamais eu l'occasion de comprendre cela. Aujourd'hui, je vais régler cette partie des connaissances.

Stream est une ressource fournie par PHP, que nous pouvons utiliser de manière transparente, et stream est un outil très puissant. Une utilisation appropriée des flux dans les programmes peut amener nos programmes à un nouveau niveau.

Chaque flux implémente un wrapper, qui contient du code supplémentaire pour gérer des protocoles et des encodages spéciaux. PHP fournit des wrappers intégrés, et nous pouvons également facilement créer et enregistrer des wrappers personnalisés. Nous pouvons même utiliser des contextes et des filtres pour modifier et améliorer les wrappers.

Connaissance de base des flux

La forme des flux en PHP est : e8ecf1fabecb2bbf3952eba1f0f8a7ec://b4bef09dd2761803871f1d83e55d08b2. e8ecf1fabecb2bbf3952eba1f0f8a7ec est le nom du wrapper et le contenu de b4bef09dd2761803871f1d83e55d08b2 dépend de la syntaxe différente du wrapper.
Le wrapper par défaut est file://, ce qui signifie que les flux sont utilisés à chaque fois que nous accédons au système de fichiers. Par exemple, nous pouvons utiliser les deux méthodes suivantes pour lire des fichiers : readfile('/path/to/somefile.txt') et readfile('file:///path/to/somefile.txt'). Utilisez ces deux méthodes. pour lire le fichier, vous pouvez obtenir le même résultat.

Comme mentionné précédemment, PHP fournit des wrappers, protocoles et filtres intégrés. Pour vérifier quels wrappers sont installés sur notre machine, vous pouvez utiliser les fonctions suivantes :

Le code est le suivant :

<?php
    var_dump(stream_get_transports());
    var_dump(stream_get_wrappers());
    var_dump(stream_get_filters());
?>

Le contenu de sortie de mon environnement local est le suivant :

Le code est le suivant :

array (size=8)
  0 => string &#39;tcp&#39; (length=3)
  1 => string &#39;udp&#39; (length=3)
  2 => string &#39;unix&#39; (length=4)
  3 => string &#39;udg&#39; (length=3)
  4 => string &#39;ssl&#39; (length=3)
  5 => string &#39;sslv3&#39; (length=5)
  6 => string &#39;sslv2&#39; (length=5)
  7 => string &#39;tls&#39; (length=3)
array (size=12)
  0 => string &#39;https&#39; (length=5)
  1 => string &#39;ftps&#39; (length=4)
  2 => string &#39;compress.zlib&#39; (length=13)
  3 => string &#39;compress.bzip2&#39; (length=14)
  4 => string &#39;php&#39; (length=3)
  5 => string &#39;file&#39; (length=4)
  6 => string &#39;glob&#39; (length=4)
  7 => string &#39;data&#39; (length=4)
  8 => string &#39;http&#39; (length=4)
  9 => string &#39;ftp&#39; (length=3)
  10 => string &#39;phar&#39; (length=4)
  11 => string &#39;zip&#39; (length=3)
array (size=12)
  0 => string &#39;zlib.*&#39; (length=6)
  1 => string &#39;bzip2.*&#39; (length=7)
  2 => string &#39;convert.iconv.*&#39; (length=15)
  3 => string &#39;string.rot13&#39; (length=12)
  4 => string &#39;string.toupper&#39; (length=14)
  5 => string &#39;string.tolower&#39; (length=14)
  6 => string &#39;string.strip_tags&#39; (length=17)
  7 => string &#39;convert.*&#39; (length=9)
  8 => string &#39;consumed&#39; (length=8)
  9 => string &#39;dechunk&#39; (length=7)
  10 => string &#39;mcrypt.*&#39; (length=8)
  11 => string &#39;mdecrypt.*&#39; (length=10)

De plus, nous pouvons personnaliser ou utiliser des flux tiers.

php:// wrapper

PHP a son propre wrapper pour accéder aux flux d'entrée/sortie (E/S). PHP a des wrappers de base php://stdin, php://stdout, php://stderr correspondant aux ressources d'E/S par défaut. Il existe également un flux php://input, qui est un flux en lecture seule, et le contenu du flux correspond aux données demandées par la publication. Ce flux est particulièrement utile lorsque nous mettons des données dans le corps d'une requête de publication pour demander un service distant.

Étant donné que php://input est le flux le plus couramment utilisé, voici quelques points de connaissances :

1.php://input peut lire les données POST non traitées. Comparé à $HTTP_RAW_POST_DATA, il exerce moins de pression sur la mémoire et ne nécessite pas de paramètres php.ini spéciaux. php://input ne peut pas être utilisé pour enctype=multipart/form-data
2 Uniquement lorsque Content-Type est application/x-www-form-urlencoded et que la méthode de soumission est la méthode POST, les données $_POST sont les mêmes. car php:/ /Les données d'entrée sont "cohérentes" (entre guillemets, indiquant que leurs formats sont incohérents et que leur contenu est cohérent). Dans d'autres cas, ils sont incohérents
3.php://input ne peut pas lire les données GET. En effet, les données _GET sont écrites sous la forme query_path dans le champ PATH de l'en-tête de la requête http (en-tête), plutôt que dans la partie corps de la requête http.

Contextes de flux

Cette partie du contenu n'a presque jamais été rencontrée en programmation, et il m'est difficile de la rechercher. Si vous êtes intéressé, vous pouvez. Baidu vous-même.

Résumé

Les flux ne sont pas beaucoup utilisés dans la programmation quotidienne Lors de l'utilisation de XML-RPC, le côté serveur obtient les données client, principalement via l'entrée du flux d'entrée php, c'est-à-dire. un scénario courant. Les pirates peuvent également utiliser cette partie du contenu lorsqu'ils envahissent le site Web.

Recommandations associées :

Comment utiliser la classe Snoopy pour analyser les fichiers HTML

php pour les opérations sur les fichiers et caractères Méthode de cryptage de chaîne

Méthode d'opération de chaîne PHP

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