<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/wrappers.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'fr',
  ),
  'this' => 
  array (
    0 => 'wrappers.php.php',
    1 => 'php://',
    2 => 'Acc&egrave;s aux divers flux I/O',
  ),
  'up' => 
  array (
    0 => 'wrappers.php',
    1 => 'Liste des protocoles et des gestionnaires support&eacute;s',
  ),
  'prev' => 
  array (
    0 => 'wrappers.ftp.php',
    1 => 'ftp://',
  ),
  'next' => 
  array (
    0 => 'wrappers.compression.php',
    1 => 'zlib://',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'fr',
    'path' => 'language/wrappers/php.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="wrappers.php" class="refentry">
 <div class="refnamediv">
  <h1 class="refname">php://</h1>
  <p class="refpurpose"><span class="refname">php://</span> &mdash; <span class="dc-title">Accès aux divers flux I/O</span></p>

 </div>

 <div class="refsect1 description" id="refsect1-wrappers.php-description">
  <h3 class="title">Description</h3>
  <p class="para">
   PHP fournit un nombre important de flux I/O qui permettent d&#039;accéder
   aux flux d&#039;entrée et de sortie de PHP lui-même, aux descripteurs de fichiers
   d&#039;entrée, de sortie et d&#039;erreur standards, à des flux représentant
   des fichiers temporaires en mémoire vive ou sur le disque, ainsi qu&#039;à des filtres
   qui peuvent manipuler d&#039;autres ressources de fichiers pendant la lecture ou l&#039;écriture.
  </p>

  <div class="refsect2 unknown-1" id="wrappers.php.std">
   <h4 class="title">php://stdin, php://stdout et php://stderr</h4>
   <p class="simpara">
    <var class="filename">php://stdin</var>, <var class="filename">php://stdout</var> et
    <var class="filename">php://stderr</var> permettent des accès directs aux flux d&#039;entrée
    ou de sortie correspondant du processus PHP. Le flux fait référence à une copie
    du descripteur de fichier, ce qui signifie que si <var class="filename">php://stdin</var>
    est ouvert puis fermé plus tard, seule la copie du descripteur est fermée ; le
    flux réellement référencé par <strong><code><a href="reserved.constants.php#constant.stdin">STDIN</a></code></strong> n&#039;est pas affecté.
    Il est recommandé d&#039;utiliser uniquement les constantes <strong><code><a href="reserved.constants.php#constant.stdin">STDIN</a></code></strong>,
    <strong><code><a href="reserved.constants.php#constant.stdout">STDOUT</a></code></strong> et <strong><code><a href="reserved.constants.php#constant.stderr">STDERR</a></code></strong> au lieu
    d&#039;ouvrir manuellement les flux en utilisant ces enveloppes.
   </p>
   <p class="simpara">
    <var class="filename">php://stdin</var> est en lecture seule, alors que
    <var class="filename">php://stdout</var> et <var class="filename">php://stderr</var> sont
    en écriture seule.
   </p>
  </div>


  <div class="refsect2 unknown-4" id="wrappers.php.input">
   <h4 class="title">php://input</h4>
   <p class="simpara">
    <var class="filename">php://input</var> est un flux en lecture seule qui permet
    de lire des données brutes depuis le corps de la requête.
    <var class="filename">php://input</var> n&#039;est pas disponible dans les requêtes POST avec
    <code class="literal">enctype=&quot;multipart/form-data&quot;</code> si l&#039;option
    <a href="ini.core.php#ini.enable-post-data-reading" class="link">enable_post_data_reading</a>
    est activée.
   </p>
  </div>


  <div class="refsect2 unknown-7" id="wrappers.php.output">
   <h4 class="title">php://output</h4>
   <p class="para">
    <var class="filename">php://output</var> est un flux en écriture seule, qui permet d&#039;écrire
    dans le mécanisme de buffer de sortie de la même façon que les fonctions
    <span class="function"><a href="function.print.php" class="function">print</a></span> et
    <span class="function"><a href="function.echo.php" class="function">echo</a></span>.
   </p>
  </div>


  <div class="refsect2 unknown-10" id="wrappers.php.fd">
   <h4 class="title">php://fd</h4>
   <p class="simpara">
    <var class="filename">php://fd</var> permet un accès direct au descripteur de fichier
    spécifié. Par exemple, <var class="filename">php://fd/3</var> correspond au
    descripteur de fichier numéro 3.
   </p>
  </div>


  <div class="refsect2 unknown-13" id="wrappers.php.memory">
   <h4 class="title">php://memory et php://temp</h4>
   <p class="simpara">
    <var class="filename">php://memory</var> et <var class="filename">php://temp</var>
    sont des flux en lecture/écriture qui permettent de stocker des données
    temporaires dans une enveloppe de fichiers. Une différence entre
    ces deux flux est que <var class="filename">php://memory</var> stockera toujours
    ses données en mémoire, alors que <var class="filename">php://temp</var> utilisera un
    fichier temporaire une fois que la quantité de données enregistrées aura dépassé
    une limite prédéfinie (par défaut, 2 Mo). L&#039;emplacement
    de ce fichier temporaire est déterminé de la même manière que pour
    la fonction <span class="function"><a href="function.sys-get-temp-dir.php" class="function">sys_get_temp_dir()</a></span>.
   </p>
   <p class="simpara">
    La limite mémoire de <var class="filename">php://temp</var> peut être contrôlée
    en ajoutant <code class="literal">/maxmemory:NN</code>, où <code class="literal">NN</code> est
    la quantité maximale de données à conserver en mémoire avant d&#039;utiliser
    un fichier temporaire, en octets.
   </p>
   <div class="caution"><strong class="caution">Attention</strong>
    <p class="simpara">
     Certaines extensions PHP peuvent nécessiter un flux IO standard,
     et peuvent tenter de convertir un flux donné à un flux IO standard.
     Cette conversion peut échouer pour les flux de mémoire, car la fonction C
     <span class="function"><strong>fopencookie()</strong></span> doit être disponible.
     Cette fonction C <em>n&#039;est pas</em> disponible sur Windows.
    </p>
   </div>
  </div>


  <div class="refsect2 unknown-16" id="wrappers.php.filter">
   <h4 class="title">php://filter</h4>
   <p class="simpara">
    <var class="filename">php://filter</var> est une sorte d&#039;enveloppe prévue
    pour permettre l&#039;application de <a href="filters.php" class="link">filtres</a>
    sur un flux au moment de son ouverture. Ceci est très pratique avec
    des fonctions sur des fichiers toutes-en-un comme les fonctions
    <span class="function"><a href="function.readfile.php" class="function">readfile()</a></span>, <span class="function"><a href="function.file.php" class="function">file()</a></span> et
    <span class="function"><a href="function.file-get-contents.php" class="function">file_get_contents()</a></span>, où il n&#039;existe pas d&#039;autre mécanisme
    permettant d&#039;appliquer un filtre au flux avant que le contenu ne soit lu.
   </p>
   <p class="para">
    La cible de <var class="filename">php://filter</var> prend les paramètres suivants
    sous la forme de composantes de son chemin. Plusieurs filtres chaînés
    peuvent être spécifiés en un seul chemin. Se reporter aux exemples
    pour une utilisation correcte de ces paramètres.
   </p>
   <p class="para">
    <table class="doctable table">
     <caption><strong>Paramètres de php://filter</strong></caption>
     
      <thead>
       <tr>
        <th>Nom</th>
        <th>Description</th>
       </tr>

      </thead>

      <tbody class="tbody">
       <tr>
        <td>
         <code class="literal">resource=&lt;flux à filtrer&gt;</code>
        </td>
        <td>
         Ce paramètre est requis. Il spécifie le flux à
         filtrer.
        </td>
       </tr>

       <tr>
        <td>
         <code class="literal">read=&lt;liste des filtres à appliquer à la lecture&gt;</code>
        </td>
        <td>
         Ce paramètre est optionnel. Un ou plusieurs noms de filtres
         peuvent être fournis ici, séparés par un caractère pipe (<code class="literal">|</code>).
        </td>
       </tr>

       <tr>
        <td>
         <code class="literal">write=&lt;liste des filtres à appliquer à l&#039;écriture&gt;</code>
        </td>
        <td>
         Ce paramètre est optionnel. Un ou plusieurs noms de filtres
         peuvent être fournis ici, séparés par un caractère pipe (<code class="literal">|</code>).
        </td>
       </tr>

       <tr>
        <td>
         <code class="literal">&lt;liste de filtres à appliquer à la fois lors de la lecture et de l&#039;écriture&gt;</code>
        </td>
        <td>
         Tous les filtres fournis sans être préfixés par <code class="literal">read=</code>
         ou <code class="literal">write=</code> seront appliqués à la fois lors de la
         lecture et lors de l&#039;écriture.
        </td>
       </tr>

      </tbody>
     
    </table>

   </p>
  </div>

 </div>


 <div class="refsect1 options" id="refsect1-wrappers.php-options">
  <h3 class="title">Options</h3>
  <p class="para">
   <table class="doctable table">
    <caption><strong>
     Résumé de l&#039;enveloppe (pour <code class="literal">php://filter</code>, se reporter
     au résumé de l&#039;enveloppe à filtrer)
    </strong></caption>
    
     <thead>
      <tr>
       <th>Attribut</th>
       <th>Supporté</th>
      </tr>

     </thead>

     <tbody class="tbody">
      <tr>
       <td>Restreint par <a href="filesystem.configuration.php#ini.allow-url-fopen" class="link">allow_url_fopen</a></td>
       <td>Non</td>
      </tr>

      <tr>
       <td>Restreint par <a href="filesystem.configuration.php#ini.allow-url-include" class="link">allow_url_include</a></td>
       <td>
        <code class="literal">php://input</code>,
        <code class="literal">php://stdin</code>,
        <code class="literal">php://memory</code> et
        <code class="literal">php://temp</code> uniquement.
       </td>
      </tr>

      <tr>
       <td>Autorise la lecture</td>
       <td>
        <code class="literal">php://stdin</code>,
        <code class="literal">php://input</code>,
        <code class="literal">php://fd</code>,
        <code class="literal">php://memory</code> et
        <code class="literal">php://temp</code> uniquement.
       </td>
      </tr>

      <tr>
       <td>Autorise l&#039;écriture</td>
       <td>
        <code class="literal">php://stdout</code>,
        <code class="literal">php://stderr</code>,
        <code class="literal">php://output</code>,
        <code class="literal">php://fd</code>,
        <code class="literal">php://memory</code> et
        <code class="literal">php://temp</code> uniquement.
       </td>
      </tr>

      <tr>
       <td>Autorise l&#039;ajout</td>
       <td>
        <code class="literal">php://stdout</code>,
        <code class="literal">php://stderr</code>,
        <code class="literal">php://output</code>,
        <code class="literal">php://fd</code>,
        <code class="literal">php://memory</code> et
        <code class="literal">php://temp</code> uniquement. (Équivalent à de l&#039;écriture)
       </td>
      </tr>

      <tr>
       <td>Autorise à la fois la lecture et l&#039;écriture</td>
       <td>
        <code class="literal">php://fd</code>,
        <code class="literal">php://memory</code> et
        <code class="literal">php://temp</code> uniquement.
       </td>
      </tr>

      <tr>
       <td>Support de la fonction <span class="function"><a href="function.stat.php" class="function">stat()</a></span></td>
       <td>
        Non. Néanmoins <code class="literal">php://memory</code> et
        <code class="literal">php://temp</code> supportent <span class="function"><a href="function.fstat.php" class="function">fstat()</a></span>.
       </td>
      </tr>

      <tr>
       <td>Support de la fonction <span class="function"><a href="function.unlink.php" class="function">unlink()</a></span></td>
       <td>Non</td>
      </tr>

      <tr>
       <td>Support de la fonction <span class="function"><a href="function.rename.php" class="function">rename()</a></span></td>
       <td>Non</td>
      </tr>

      <tr>
       <td>Support de la fonction <span class="function"><a href="function.mkdir.php" class="function">mkdir()</a></span></td>
       <td>Non</td>
      </tr>

      <tr>
       <td>Support de la fonction <span class="function"><a href="function.rmdir.php" class="function">rmdir()</a></span></td>
       <td>Non</td>
      </tr>

      <tr>
       <td>Support de la fonction <span class="function"><a href="function.stream-select.php" class="function">stream_select()</a></span></td>
       <td>
        <code class="literal">php://stdin</code>,
        <code class="literal">php://stdout</code>, 
        <code class="literal">php://stderr</code>,
        <code class="literal">php://fd</code> et
        <code class="literal">php://temp</code> uniquement.
       </td>
      </tr>

     </tbody>
    
   </table>

  </p>
 </div>
 

 <div class="refsect1 examples" id="refsect1-wrappers.php-examples">
  <h3 class="title">Exemples</h3>
  <div class="example" id="example-1">
   <p><strong>Exemple #1 php://temp/maxmemory</strong></p>
   <div class="example-contents"><p>
    Ce paramètre optionnel permet de configurer la limite
    mémoire avant que <var class="filename">php://temp</var> ne commence à utiliser
    un fichier temporaire.
   </p></div>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// Définit la limite à 5 Mo.<br /></span><span style="color: #0000BB">$fiveMBs </span><span style="color: #007700">= </span><span style="color: #0000BB">5 </span><span style="color: #007700">* </span><span style="color: #0000BB">1024 </span><span style="color: #007700">* </span><span style="color: #0000BB">1024</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$fp </span><span style="color: #007700">= </span><span style="color: #0000BB">fopen</span><span style="color: #007700">(</span><span style="color: #DD0000">"php://temp/maxmemory:</span><span style="color: #0000BB">$fiveMBs</span><span style="color: #DD0000">"</span><span style="color: #007700">, </span><span style="color: #DD0000">'r+'</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">fputs</span><span style="color: #007700">(</span><span style="color: #0000BB">$fp</span><span style="color: #007700">, </span><span style="color: #DD0000">"hello\n"</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// Lit ce que nous venons d'écrire.<br /></span><span style="color: #0000BB">rewind</span><span style="color: #007700">(</span><span style="color: #0000BB">$fp</span><span style="color: #007700">);<br />echo </span><span style="color: #0000BB">stream_get_contents</span><span style="color: #007700">(</span><span style="color: #0000BB">$fp</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
  <div class="example" id="example-2">
   <p><strong>Exemple #2 php://filter/resource=&lt;flux à filtrer&gt;</strong></p>
   <div class="example-contents"><p>
    Ce paramètre doit être placé à la fin de la spécification
    de <var class="filename">php://filter</var> et doit pointer sur le flux
    à filtrer.
   </p></div>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">/* Ceci est équivalent à<br />  readfile("http://www.example.com");<br />  vu qu'aucun filtre n'est spécifié */<br /><br /></span><span style="color: #0000BB">readfile</span><span style="color: #007700">(</span><span style="color: #DD0000">"php://filter/resource=http://www.example.com"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
  <div class="example" id="example-3">
   <p><strong>Exemple #3 php://filter/read=&lt;liste de filtres à appliquer lors de la lecture&gt;</strong></p>
   <div class="example-contents"><p>
    Ce paramètre prend un ou plusieurs noms de filtres séparés par
    un caractère pipe <code class="literal">|</code>.
   </p></div>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">/* Ceci affichera le contenu de<br />  www.example.com entièrement en majuscules */<br /></span><span style="color: #0000BB">readfile</span><span style="color: #007700">(</span><span style="color: #DD0000">"php://filter/read=string.toupper/resource=http://www.example.com"</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">/* Ceci fera la même chose que le précédent,<br />  mais encodera en plus le résultat en ROT13 */<br /></span><span style="color: #0000BB">readfile</span><span style="color: #007700">(</span><span style="color: #DD0000">"php://filter/read=string.toupper|string.rot13/resource=http://www.example.com"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
  <div class="example" id="example-4">
   <p><strong>Exemple #4 php://filter/write=&lt;liste des filtres à appliquer lors de l&#039;écriture&gt;</strong></p>
   <div class="example-contents"><p>
    Ce paramètre prend un ou plusieurs noms de filtres séparés par
    un caractère pipe <code class="literal">|</code>.
   </p></div>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">/* Ceci va filtrer la chaîne "Hello World"<br />  via le filtre rot13, puis écrire le résultat<br />  dans le fichier example.txt du dossier courant */<br /></span><span style="color: #0000BB">file_put_contents</span><span style="color: #007700">(</span><span style="color: #DD0000">"php://filter/write=string.rot13/resource=example.txt"</span><span style="color: #007700">,</span><span style="color: #DD0000">"Hello World"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
  <div class="example" id="example-5">
   <p><strong>Exemple #5 php://memory et php://temp ne sont pas réutilisables</strong></p>
   <div class="example-contents"><p>
    <var class="filename">php://memory</var> et <var class="filename">php://temp</var>
    ne sont pas réutilisables, c.-à-d. après que les flux ont été fermés il n&#039;y a aucun moyen de les référer à nouveau.
   </p></div>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />file_put_contents</span><span style="color: #007700">(</span><span style="color: #DD0000">'php://memory'</span><span style="color: #007700">, </span><span style="color: #DD0000">'PHP'</span><span style="color: #007700">);<br />echo </span><span style="color: #0000BB">file_get_contents</span><span style="color: #007700">(</span><span style="color: #DD0000">'php://memory'</span><span style="color: #007700">); </span><span style="color: #FF8000">// affiche rien</span></span></code></div>
   </div>

  </div>
  <div class="example" id="example-6">
   <p><strong>Exemple #6 php://input pour lire des données JSON depuis le corps de la requête</strong></p>
   <div class="example-contents"><p>
    Cet exemple montre comment lire des données JSON brutes à partir des requêtes POST, PUT et
    PATCH en utilisant <var class="filename">php://input</var>.
   </p></div>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$input </span><span style="color: #007700">= </span><span style="color: #0000BB">file_get_contents</span><span style="color: #007700">(</span><span style="color: #DD0000">"php://input"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$json_array </span><span style="color: #007700">= </span><span style="color: #0000BB">json_decode</span><span style="color: #007700">(<br />  </span><span style="color: #0000BB">json</span><span style="color: #007700">: </span><span style="color: #0000BB">$input</span><span style="color: #007700">,<br />  </span><span style="color: #0000BB">associative</span><span style="color: #007700">: </span><span style="color: #0000BB">true</span><span style="color: #007700">,<br />  </span><span style="color: #0000BB">flags</span><span style="color: #007700">: </span><span style="color: #0000BB">JSON_THROW_ON_ERROR<br /></span><span style="color: #007700">);<br /><br />echo </span><span style="color: #DD0000">"Données JSON reçues : "</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$json_array</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
 </div>

</div><?php manual_footer($setup); ?>