<?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 => 'ja',
  ),
  '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' => 'ja',
    '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">
   このラッパーが受け取るのは、RAR アーカイブへの URL エンコードされたパス
   (絶対パスあるいは相対パス)、そしてオプションでアスタリスク
   (<code class="literal">*</code>)、番号記号 (<code class="literal">#</code>)、
   アーカイブ内のエントリ名です。エントリ名を指定する場合は番号記号が必須となります。
   エントリ名の先頭のスラッシュは必須ではありません。
  </p>
  
  <p class="simpara">
   このラッパーは、ファイルだけでなくディレクトリも開くことができます。
   ディレクトリを開く際にアスタリスクを使うと、
   返されるディレクトリエントリ名はエンコードされていない状態となります。
   アスタリスクを指定しなかった場合は URL エンコードしたものを返します。
   これは、<span class="classname"><a href="class.recursivedirectoryiterator.php" class="classname">RecursiveDirectoryIterator</a></span> などの組み込み機能で
   このラッパーをファイル名の代わりに正しく使えるようにするためです。
  </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/" class="link external">&raquo;&nbsp;PECL</a> から
    <a href="https://pecl.php.net/package/rar" class="link external">&raquo;&nbsp;rar</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>No</td>
      </tr>

      <tr>
       <td><a href="filesystem.configuration.php#ini.allow-url-include" class="link">allow_url_include</a> で制約される</td>
       <td>No</td>
      </tr>

      <tr>
       <td>読み込み許可</td>
       <td>Yes</td>
      </tr>

      <tr>
       <td>書き込み許可</td>
       <td>No</td>
      </tr>

      <tr>
       <td>追加許可</td>
       <td>No</td>
      </tr>

      <tr>
       <td>同時読み書き許可</td>
       <td>No</td>
      </tr>

      <tr>
       <td><span class="function"><a href="function.stat.php" class="function">stat()</a></span> のサポート</td>
       <td>Yes</td>
      </tr>

      <tr>
       <td><span class="function"><a href="function.unlink.php" class="function">unlink()</a></span> のサポート</td>
       <td>No</td>
      </tr>

      <tr>
       <td><span class="function"><a href="function.rename.php" class="function">rename()</a></span> のサポート</td>
       <td>No</td>
      </tr>

      <tr>
       <td><span class="function"><a href="function.mkdir.php" class="function">mkdir()</a></span> のサポート</td>
       <td>No</td>
      </tr>

      <tr>
       <td><span class="function"><a href="function.rmdir.php" class="function">rmdir()</a></span> のサポート</td>
       <td>No</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); ?>