<?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 => 'ru',
  ),
  'this' => 
  array (
    0 => 'wrappers.rar.php',
    1 => 'rar://',
    2 => 'RAR',
  ),
  'up' => 
  array (
    0 => 'wrappers.php',
    1 => 'Протоколы и обёртки',
  ),
  'prev' => 
  array (
    0 => 'wrappers.ssh2.php',
    1 => 'ssh2://',
  ),
  'next' => 
  array (
    0 => 'wrappers.audio.php',
    1 => 'ogg://',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'ru',
    'path' => 'language/wrappers/rar.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="wrappers.rar" class="refentry">
 <div class="refnamediv">
  <h1 class="refname">rar://</h1>
  <p class="refpurpose"><span class="refname">rar://</span> &mdash; <span class="dc-title">RAR</span></p>

 </div>

 <div class="refsect1 description" id="refsect1-wrappers.rar-description">
  <h3 class="title">Описание</h3>
  <p class="para">
   Эта обёртка принимает URL-кодированный путь к RAR-архиву (относительный или абсолютный),
   необязательный символ звёздочки (<code class="literal">*</code>), необязательный символ решётки
   (<code class="literal">#</code>) и необязательное URL-кодированное имя такое, как хранится
   в архиве. Для указания имени содержимого требуется символ решётки, начальный обратный слеш
   в названии содержимого необязателен.
  </p>

  <p class="simpara">
   Эта обёртка может открывать файлы и директории. Когда открываются директории,
   знак звёздочки требует, чтобы имена объектов директории были закодированы unencode.
   Если такой знак не указан, они будут возвращены в URL-кодировке. Смысл этого
   в том, чтобы позволить обёртке корректно использовать встроенную функциональность, такую как
   <span class="classname"><a href="class.recursivedirectoryiterator.php" class="classname">RecursiveDirectoryIterator</a></span> когда присутствуют имена файлов, которые
   кажутся как url-закодированные данные.
  </p>

  <p class="simpara">
   Если символ решётки и часть имени записи не включена, будет отображён
   корень архива. Это отличается от обычных директорий тем, что результирующий
   поток не будет содержать такую информацию, как время модификации, так как корневая
   директория не сохраняется как отдельная запись в архиве.
   Использование обёртки с <span class="classname"><a href="class.recursivedirectoryiterator.php" class="classname">RecursiveDirectoryIterator</a></span> требует,
   чтобы символ решётки был включён в URL, когда происходит доступ к корню, так чтобы
   URL потомков мог быть сконструирован правильно.
  </p>
  <blockquote class="note"><p><strong class="note">Замечание</strong>: 
   <strong>Эта обёртка не включена по умолчанию</strong><br />
   <span class="simpara">
    Для того, чтобы использовать обёртку <var class="filename">rar://</var>, необходимо установить
    модуль <a href="https://pecl.php.net/package/rar" class="link external">&raquo;&nbsp;rar</a>,
    доступный в репозитории <a href="https://pecl.php.net/" class="link external">&raquo;&nbsp;PECL</a>.
   </span>
  </p></blockquote>
  <p class="simpara">
   <var class="filename">rar://</var>
   Доступно начиная с PECL rar 3.0.0
  </p>

 </div>


 <div class="refsect1 usage" id="refsect1-wrappers.rar-usage"> 
  <h3 class="title">Использование</h3>
  <ul class="itemizedlist">
   <li class="listitem"><span class="simpara"><var class="filename">rar://&lt;url encoded archive name&gt;[*][#[&lt;url encoded entry name&gt;]]</var></span></li>
  </ul>
 </div>
 

 <div class="refsect1 options" id="refsect1-wrappers.rar-options">
  <h3 class="title">Опции</h3>
  <p class="para">
   <table class="doctable table">
    <caption><strong>Основная информация</strong></caption>
    
     <thead>
      <tr>
       <th>Атрибут</th>
       <th>Поддержка</th>
      </tr>

     </thead>

     <tbody class="tbody">
      <tr>
       <td>Ограничение по <a href="filesystem.configuration.php#ini.allow-url-fopen" class="link">allow_url_fopen</a></td>
       <td>Нет</td>
      </tr>

      <tr>
       <td>Ограничение по <a href="filesystem.configuration.php#ini.allow-url-include" class="link">allow_url_include</a></td>
       <td>Нет</td>
      </tr>

      <tr>
       <td>Чтение</td>
       <td>Да</td>
      </tr>

      <tr>
       <td>Запись</td>
       <td>Нет</td>
      </tr>

      <tr>
       <td>Добавление</td>
       <td>Нет</td>
      </tr>

      <tr>
       <td>Одновременное чтение и запись</td>
       <td>Нет</td>
      </tr>

      <tr>
       <td>Поддержка <span class="function"><a href="function.stat.php" class="function">stat()</a></span></td>
       <td>Да</td>
      </tr>

      <tr>
       <td>Поддержка <span class="function"><a href="function.unlink.php" class="function">unlink()</a></span></td>
       <td>Нет</td>
      </tr>

      <tr>
       <td>Поддержка <span class="function"><a href="function.rename.php" class="function">rename()</a></span></td>
       <td>Нет</td>
      </tr>

      <tr>
       <td>Поддержка <span class="function"><a href="function.mkdir.php" class="function">mkdir()</a></span></td>
       <td>Нет</td>
      </tr>

      <tr>
       <td>Поддержка <span class="function"><a href="function.rmdir.php" class="function">rmdir()</a></span></td>
       <td>Нет</td>
      </tr>

     </tbody>
    
   </table>

  </p>

  
  <p class="para">
   <table class="doctable table">
    <caption><strong>Опции контекста</strong></caption>
    
     <thead>
      <tr>
       <th>Название</th>
       <th>Использование</th>
       <th>По умолчанию</th>
      </tr>

     </thead>

     <tbody class="tbody">
      <tr>
       <td><code class="literal">open_password</code></td>
       <td>Пароль используется для шифрования заголовков архива,
    если таковые есть. WinRAR будет шифровать все файлы с таким же паролем,
       как и пароль заголовков, когда последний присутствует. Поэтому
       для архивов с зашифрованными заголовками опция <code class="literal">file_password</code>
    будет проигнорирована.
       </td>
       <td class="empty">&nbsp;</td>
      </tr>

      <tr>
       <td><code class="literal">file_password</code></td>
       <td>Пароль, используемый для шифрования файла, если таковой имеется. Если
    заголовки также зашифрованы, эта опция будет игнорирована в пользу
       <code class="literal">open_password</code>. Причина этого в том, что нет
    смысла в использовании одновременно двух разных паролей для шифрования
    отдельно заголовков и отдельно файлов. Нет таких архивов, где бы это
    пригодилось. Заметим, что если у архива отсутствуют зашифрованные заголовки,
    то опция <code class="literal">open_password</code> будет игнорирована и эта опция должна
       быть использована вместо неё.
    
       </td>
       <td class="empty">&nbsp;</td>
      </tr>

      <tr>
       <td><code class="literal">volume_callback</code></td>
       <td>Обратный вызов для определения пути недостающих томов архива. Смотрите
        <span class="methodname"><a href="rararchive.open.php" class="methodname">RarArchive::open()</a></span> для более детальной информации.
       </td>
       <td class="empty">&nbsp;</td>
      </tr>

     </tbody>
    
   </table>

  </p>
 </div>
 

 <div class="refsect1 examples" id="refsect1-wrappers.rar-examples">
  <h3 class="title">Примеры</h3>
  <div class="example" id="example-1">
   <p><strong>Пример #1 Обход RAR-архива</strong></p>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">class </span><span style="color: #0000BB">MyRecDirIt </span><span style="color: #007700">extends </span><span style="color: #0000BB">RecursiveDirectoryIterator </span><span style="color: #007700">{<br />    function </span><span style="color: #0000BB">current</span><span style="color: #007700">() {<br />        return </span><span style="color: #0000BB">rawurldecode</span><span style="color: #007700">(</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">getSubPathName</span><span style="color: #007700">()) .<br />            (</span><span style="color: #0000BB">is_dir</span><span style="color: #007700">(</span><span style="color: #0000BB">parent</span><span style="color: #007700">::</span><span style="color: #0000BB">current</span><span style="color: #007700">())?</span><span style="color: #DD0000">" [DIR]"</span><span style="color: #007700">:</span><span style="color: #DD0000">""</span><span style="color: #007700">);<br />    }<br />}<br /><br /></span><span style="color: #0000BB">$f </span><span style="color: #007700">= </span><span style="color: #DD0000">"rar://" </span><span style="color: #007700">. </span><span style="color: #0000BB">rawurlencode</span><span style="color: #007700">(</span><span style="color: #0000BB">dirname</span><span style="color: #007700">(</span><span style="color: #0000BB">__FILE__</span><span style="color: #007700">)) .<br />    </span><span style="color: #0000BB">DIRECTORY_SEPARATOR </span><span style="color: #007700">. </span><span style="color: #DD0000">'dirs_and_extra_headers.rar#'</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$it </span><span style="color: #007700">= new </span><span style="color: #0000BB">RecursiveTreeIterator</span><span style="color: #007700">(new </span><span style="color: #0000BB">MyRecDirIt</span><span style="color: #007700">(</span><span style="color: #0000BB">$f</span><span style="color: #007700">));<br /><br />foreach (</span><span style="color: #0000BB">$it </span><span style="color: #007700">as </span><span style="color: #0000BB">$s</span><span style="color: #007700">) {<br />    echo </span><span style="color: #0000BB">$s</span><span style="color: #007700">, </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

    
<div class="example-contents"><p>
 Вывод приведённого примера будет похож на:
</p></div>

    <div class="example-contents screen">
<div class="examplescode"><pre class="examplescode">|-allow_everyone_ni [DIR]
|-file1.txt
|-file2_אּ.txt
|-with_streams.txt
\-אּ [DIR]
  |-אּ\%2Fempty%2E [DIR]
  | \-אּ\%2Fempty%2E\file7.txt
  |-אּ\empty [DIR]
  |-אּ\file3.txt
  |-אּ\file4_אּ.txt
  \-אּ\אּ_2 [DIR]
    |-אּ\אּ_2\file5.txt
    \-אּ\אּ_2\file6_אּ.txt</pre>
</div>
   </div>
  </div>
  <div class="example" id="example-2">
   <p><strong>Пример #2 Открытие зашифрованного файла (шифрование заголовка)</strong></p>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$stream </span><span style="color: #007700">= </span><span style="color: #0000BB">fopen</span><span style="color: #007700">(</span><span style="color: #DD0000">"rar://" </span><span style="color: #007700">.<br />    </span><span style="color: #0000BB">rawurlencode</span><span style="color: #007700">(</span><span style="color: #0000BB">dirname</span><span style="color: #007700">(</span><span style="color: #0000BB">__FILE__</span><span style="color: #007700">)) . </span><span style="color: #0000BB">DIRECTORY_SEPARATOR </span><span style="color: #007700">.<br />    </span><span style="color: #DD0000">'encrypted_headers.rar' </span><span style="color: #007700">. </span><span style="color: #DD0000">'#encfile1.txt'</span><span style="color: #007700">, </span><span style="color: #DD0000">"r"</span><span style="color: #007700">, </span><span style="color: #0000BB">false</span><span style="color: #007700">,<br />    </span><span style="color: #0000BB">stream_context_create</span><span style="color: #007700">(<br />        array(<br />            </span><span style="color: #DD0000">'rar' </span><span style="color: #007700">=&gt;<br />                array(<br />                    </span><span style="color: #DD0000">'open_password' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'samplepassword'<br />                </span><span style="color: #007700">)<br />            )<br />        )<br />    );<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">stream_get_contents</span><span style="color: #007700">(</span><span style="color: #0000BB">$stream</span><span style="color: #007700">));<br /></span><span style="color: #FF8000">/* дата создания и дата последнего доступа включается опционально в WinRAR, поэтому у<br /> * большинства файлов их нет */<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">fstat</span><span style="color: #007700">(</span><span style="color: #0000BB">$stream</span><span style="color: #007700">));<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

    
<div class="example-contents"><p>
 Вывод приведённого примера будет похож на:
</p></div>

    <div class="example-contents screen">
<div class="examplescode"><pre class="examplescode">string(26) &quot;Encrypted file 1 contents.&quot;
Array
(
    [0] =&gt; 0
    [1] =&gt; 0
    [2] =&gt; 33206
    [3] =&gt; 1
    [4] =&gt; 0
    [5] =&gt; 0
    [6] =&gt; 0
    [7] =&gt; 26
    [8] =&gt; 0
    [9] =&gt; 1259550052
    [10] =&gt; 0
    [11] =&gt; -1
    [12] =&gt; -1
    [dev] =&gt; 0
    [ino] =&gt; 0
    [mode] =&gt; 33206
    [nlink] =&gt; 1
    [uid] =&gt; 0
    [gid] =&gt; 0
    [rdev] =&gt; 0
    [size] =&gt; 26
    [atime] =&gt; 0
    [mtime] =&gt; 1259550052
    [ctime] =&gt; 0
    [blksize] =&gt; -1
    [blocks] =&gt; -1
)</pre>
</div>
   </div>
  </div>
 </div>


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