<?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 => 'ru',
  ),
  'this' => 
  array (
    0 => 'phar.using.object.php',
    1 => 'Использование Phar-архивов: классы Phar и PharData',
    2 => 'Использование Phar-архивов: классы Phar и PharData',
  ),
  'up' => 
  array (
    0 => 'phar.using.php',
    1 => 'Использование Phar-архивов',
  ),
  'prev' => 
  array (
    0 => 'phar.using.stream.php',
    1 => 'Использование Phar-архивов: обёртка потока phar',
  ),
  'next' => 
  array (
    0 => 'phar.creating.php',
    1 => 'Создание Phar-архивов',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'ru',
    '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">Использование Phar-архивов: классы Phar и PharData</h2>
  <p class="para">
   Класс <span class="classname"><a href="class.phar.php" class="classname">Phar</a></span> поддерживает чтение и обработку
   Phar-архивов, а также итерацию через унаследованную функциональность
   класса <span class="classname"><a href="class.recursivedirectoryiterator.php" class="classname">RecursiveDirectoryIterator</a></span>.
   Благодаря поддержке интерфейса <span class="classname"><a href="class.arrayaccess.php" class="classname">ArrayAccess</a></span>,
   доступ к файлам внутри Phar-архива может быть получен, как если бы
   они были частью ассоциативного массива.
  </p>
  <p class="para">
   Класс <span class="classname"><a href="class.phardata.php" class="classname">PharData</a></span> расширяет класс <span class="classname"><a href="class.phar.php" class="classname">Phar</a></span> и
   позволяет создавать и изменять неисполняемые tar- и zip-архивы данных даже в том случае,
   если параметр <code class="literal">phar.readonly</code>=1 в php.ini. Фактически функции
   <span class="function"><a href="phardata.setalias.php" class="function">PharData::setAlias()</a></span> и <span class="function"><a href="phardata.setstub.php" class="function">PharData::setStub()</a></span>
   отключены, поскольку концепция псевдонима и заглушки является уникальной для
   исполняемых phar-архивов.
  </p>
  <p class="para">
   Важно отметить, что при создании Phar-архива в конструктор объекта <span class="classname"><a href="class.phar.php" class="classname">Phar</a></span>
   должен быть передан полный путь. Попытки инициализации объекта Phar с относительными путями потерпят неудачу.
  </p>
  <p class="para">
   Предположим, что <code class="literal">$p</code> — объект Phar, инициализированный, как показано ниже:
  </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">'/путь/к/myphar.phar'</span><span style="color: #007700">, </span><span style="color: #0000BB">0</span><span style="color: #007700">, </span><span style="color: #DD0000">'myphar.phar'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
 </p>
 <p class="para">
  Пустой Phar-архив будет создан в <code class="literal">/путь/к/myphar.phar</code>, или,
  если файл <code class="literal">/path/to/myphar.phar</code> уже существует, он будет открыт повторно.
  Использование <code class="literal">myphar.phar</code> показывает концепцию псевдонима,
  который может быть использован для указания на <code class="literal">/путь/к/myphar.phar</code>
  в URL-адресах, подобно тому, как показано ниже:
 </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">// эти два вызова file_get_contents() равнозначны в том случае, если<br />// /путь/к/myphar.phar имеет явно заданный псевдоним "myphar.phar"<br />// в своём манифесте, или если phar был инициализирован созданием объекта Phar,<br />// как показано в предыдущем примере<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:///путь/к/myphar.phar/whatever.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://myphar.phar/whatever.txt'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
 </p>
 <p class="para">
  С только что созданным объектом <code class="literal">$p</code> класса <span class="classname"><a href="class.phar.php" class="classname">Phar</a></span>
  возможно следующее:
  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara">
     <code class="literal">$a = $p[&#039;file.php&#039;]</code> создаст объект класса <span class="classname"><a href="class.pharfileinfo.php" class="classname">PharFileInfo</a></span>,
     который будет ссылаться на содержимое <code class="literal">phar://myphar.phar/file.php</code>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <code class="literal">$p[&#039;file.php&#039;] = $v</code> создаст новый файл
     (<code class="literal">phar://myphar.phar/file.php</code>) или перезапишет существующий
     внутри <code class="literal">myphar.phar</code>. <code class="literal">$v</code> может быть строкой
     или указателем на открытый файл. В последнем случае для создания нового файла
     будет использовано всё содержимое открытого файла. Обратите внимание, что
     функционально эквивалентным этому будет вызов <code class="literal">$p-&gt;addFromString(&#039;file.php&#039;, $v)</code>.
     Также имеется возможность добавления содержимого файла при помощи
     <code class="literal">$p-&gt;addFile(&#039;/path/to/file.php&#039;, &#039;file.php&#039;)</code>.
     Наконец, пустой каталог может быть создан при помощи <code class="literal">$p-&gt;addEmptyDir(&#039;empty&#039;)</code>.
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <code class="literal">isset($p[&#039;file.php&#039;])</code> может быть использовано для определения
     существования файла <code class="literal">phar://myphar.phar/file.php</code> внутри <code class="literal">myphar.phar</code>.
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <code class="literal">unset($p[&#039;file.php&#039;])</code> удаляет файл
     <code class="literal">phar://myphar.phar/file.php</code> из <code class="literal">myphar.phar</code>.
    </span>
   </li>
  </ul>
 </p>
 <p class="para">
  Кроме того, использование объекта <span class="classname"><a href="class.phar.php" class="classname">Phar</a></span> является единственным способом
  получить доступ к метаданным архива (через <span class="function"><a href="phar.getmetadata.php" class="function">Phar::getMetadata()</a></span>)
  и единственным способом установить или получить заглушку Phar-архива через
  <span class="function"><a href="phar.getstub.php" class="function">Phar::getStub()</a></span> и <span class="function"><a href="phar.setstub.php" class="function">Phar::setStub()</a></span>.
  К тому же, работать со сжатием целого Phar-архива можно только используя
  класс <span class="classname"><a href="class.phar.php" class="classname">Phar</a></span>.
 </p>
 <p class="para">
  Полный перечень функционала объекта <span class="classname"><a href="class.phar.php" class="classname">Phar</a></span> задокументирован ниже.
 </p>
 <p class="para">
  Класс <span class="classname"><a href="class.pharfileinfo.php" class="classname">PharFileInfo</a></span> расширяет класс <span class="classname"><a href="class.splfileinfo.php" class="classname">SplFileInfo</a></span>
  и добавляет несколько методов для работы с деталями, присущими файлам, которые содержатся в Phar-архиве,
  такими как работа со сжатием и метаданными.
 </p>
 </div><?php manual_footer($setup); ?>