<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/phar.using.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'fr',
  ),
  'this' => 
  array (
    0 => 'phar.using.object.php',
    1 => 'Utiliser les archives Phar : les classes Phar et PharData',
    2 => 'Utiliser les archives Phar : les classes Phar et PharData',
  ),
  'up' => 
  array (
    0 => 'phar.using.php',
    1 => 'Utiliser les archives Phar',
  ),
  'prev' => 
  array (
    0 => 'phar.using.stream.php',
    1 => 'Utiliser les archives Phar : le flux phar',
  ),
  'next' => 
  array (
    0 => 'phar.creating.php',
    1 => 'Cr&eacute;er des archives Phar',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'fr',
    'path' => 'reference/phar/using.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="phar.using.object" class="section">
 <h2 class="title">Utiliser les archives Phar : les classes Phar et PharData</h2>
 <p class="para">
  La classe <span class="classname"><a href="class.phar.php" class="classname">Phar</a></span> supporte la lecture et la manipulation des
  archives Phar, ainsi que l&#039;itération à travers la fonctionnalité héritée de la classe
  <span class="classname"><a href="class.recursivedirectoryiterator.php" class="classname">RecursiveDirectoryIterator</a></span>.
  Avec le support de l&#039;interface <span class="classname"><a href="class.arrayaccess.php" class="classname">ArrayAccess</a></span>,
  les fichiers contenus dans une archive Phar peuvent être accédés
  comme s&#039;ils étaient membres d&#039;un tableau associatif.
 </p>
 <p class="para">
  La classe <span class="classname"><a href="class.phardata.php" class="classname">PharData</a></span> étend la classe <span class="classname"><a href="class.phar.php" class="classname">Phar</a></span>, et
  permet la création et la modification d&#039;archives tar et zip non exécutables (données) même si
  <code class="literal">phar.readonly</code>=1 dans php.ini. Ainsi,
  <span class="function"><a href="phardata.setalias.php" class="function">PharData::setAlias()</a></span> et <span class="function"><a href="phardata.setstub.php" class="function">PharData::setStub()</a></span>
  sont toutes deux désactivées car les concepts d&#039;alias et de conteneur sont restreints aux
  archives phar exécutables.
 </p>
 <p class="para">
  Il est important de noter que quand une archive Phar est créée, le chemin complet
  doit être passé au constructeur de l&#039;objet <span class="classname"><a href="class.phar.php" class="classname">Phar</a></span>.
  Un chemin relatif empêcherait l&#039;initialisation.
 </p>
 <p class="para">
  En supposant que <code class="literal">$p</code> est un objet initialisé de cette façon :
 </p>
 <p class="para">
  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$p </span><span style="color: #007700">= new </span><span style="color: #0000BB">Phar</span><span style="color: #007700">(</span><span style="color: #DD0000">'/chemin/vers/monphar.phar'</span><span style="color: #007700">, </span><span style="color: #0000BB">0</span><span style="color: #007700">, </span><span style="color: #DD0000">'monphar.phar'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
 </p>
 <p class="para">
  Une archive Phar vide sera créée en tant que <code class="literal">/chemin/vers/monphar.phar</code>,
  ou si <code class="literal">/chemin/vers/monphar.phar</code> existe déjà, il sera ouvert
  de nouveau. Le terme <code class="literal">monphar.phar</code> démontre le concept d&#039;un alias
  qui peut être utilisé pour référencer <code class="literal">/chemin/vers/monphar.phar</code> dans des URL comme ceci :
 </p>
 <p class="para">
  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// ces deux appels à file_get_contents() sont équivalents si<br />// /chemin/vers/monphar.phar a un alias explicite de "monphar.phar"<br />// dans son manifeste, ou si le phar a été initialisé avec l'instantiation de<br />// l'objet Phar de l'exemple précédent<br /></span><span style="color: #0000BB">$f </span><span style="color: #007700">= </span><span style="color: #0000BB">file_get_contents</span><span style="color: #007700">(</span><span style="color: #DD0000">'phar:///chemin/vers/monphar.phar/nimportequoi.txt'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$f </span><span style="color: #007700">= </span><span style="color: #0000BB">file_get_contents</span><span style="color: #007700">(</span><span style="color: #DD0000">'phar://monphar.phar/nimportequoi.txt'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
 </p>
 <p class="para">
  Avec l&#039;objet <span class="classname"><a href="class.phar.php" class="classname">Phar</a></span> <code class="literal">$p</code> nouvellement créé,
  les choses suivantes sont possibles :
  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara">
     <code class="literal">$a = $p[&#039;fichier.php&#039;]</code> crée une <span class="classname"><a href="class.pharfileinfo.php" class="classname">PharFileInfo</a></span>
     qui réfère au contenu de <code class="literal">phar://monphar.phar/fichier.php</code>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <code class="literal">$p[&#039;fichier.php&#039;] = $v</code> crée un nouveau fichier
     (<code class="literal">phar://monphar.phar/fichier.php</code>), ou écrase
     un fichier existant au sein de <code class="literal">monphar.phar</code>. <code class="literal">$v</code>
     peut être soit une chaîne ou un pointeur vers un fichier ouvert, dans quel cas
     le contenu du fichier sera utilisé pour créer le nouveau fichier. À noter que
     <code class="literal">$p-&gt;addFromString(&#039;fichier.php&#039;, $v)</code> est équivalent en termes de
     fonctionnalité au cas ci-dessus. Il est aussi possible d&#039;ajouter le contenu d&#039;un fichier
     avec <code class="literal">$p-&gt;addFile(&#039;/chemin/vers/fichier.php&#039;, &#039;fichier.php&#039;)</code>.
     Enfin, un répertoire vide peut être créé avec
     <code class="literal">$p-&gt;addEmptyDir(&#039;vide&#039;)</code>.
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <code class="literal">isset($p[&#039;fichier.php&#039;])</code> peut être utilisé pour déterminer 
     si <code class="literal">phar://monphar.phar/fichier.php</code> existe au sein de
     <code class="literal">monphar.phar</code>.
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <code class="literal">unset($p[&#039;fichier.php&#039;])</code> efface
     <code class="literal">phar://monphar.phar/fichier.php</code> de
     <code class="literal">monphar.phar</code>.
    </span>
   </li>
  </ul>
 </p>
 <p class="para">
  De plus, l&#039;objet <span class="classname"><a href="class.phar.php" class="classname">Phar</a></span> est le seul moyen 
  d&#039;accéder aux métadonnées spécifiques de Phar, via
  <span class="function"><a href="phar.getmetadata.php" class="function">Phar::getMetadata()</a></span>,
  et c&#039;est aussi le seul moyen de régler ou de récupérer le 
  conteneur du chargeur de l&#039;archive Phar via
  <span class="function"><a href="phar.getstub.php" class="function">Phar::getStub()</a></span> et
  <span class="function"><a href="phar.setstub.php" class="function">Phar::setStub()</a></span>.
  De plus, la compression pour l&#039;archive Phar entière peut
  être manipulée seulement via la classe <span class="classname"><a href="class.phar.php" class="classname">Phar</a></span>.
 </p>
 <p class="para">
  La liste complète des fonctionnalités de l&#039;objet 
  <span class="classname"><a href="class.phar.php" class="classname">Phar</a></span> est documentée ci-dessous.
 </p>
 <p class="para">
  La classe <span class="classname"><a href="class.pharfileinfo.php" class="classname">PharFileInfo</a></span> étend la classe 
  <span class="classname"><a href="class.splfileinfo.php" class="classname">SplFileInfo</a></span>
  et ajoute plusieurs méthodes pour manipuler les métadonnées
  spécifiques à Phar d&#039;un fichier contenu dans un Phar,
  telles que manipuler la compression ou les métadonnées.
 </p>
</div><?php manual_footer($setup); ?>