<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/book.rar.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'de',
  ),
  'this' => 
  array (
    0 => 'rar.examples.php',
    1 => 'Beispiele',
    2 => 'Beispiele',
  ),
  'up' => 
  array (
    0 => 'book.rar.php',
    1 => 'Rar',
  ),
  'prev' => 
  array (
    0 => 'rar.constants.php',
    1 => 'Vordefinierte Konstanten',
  ),
  'next' => 
  array (
    0 => 'ref.rar.php',
    1 => 'RAR Funktionen',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'en',
    'path' => 'reference/rar/examples.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="rar.examples" class="chapter">
 <h1 class="title">Beispiele</h1>


 <p class="simpara">
  See also the examples under <a href="wrappers.rar.php" class="link"><code class="literal">rar://</code> wrapper</a>.
 </p>

 <div class="example" id="example-1">
  <p><strong>Beispiel #1 On-the-fly decompression</strong></p>
  <div class="example-contents">
<div class="phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php

</span><span style="color: #007700">if (!</span><span style="color: #0000BB">array_key_exists</span><span style="color: #007700">(</span><span style="color: #DD0000">"i"</span><span style="color: #007700">, </span><span style="color: #0000BB">$_GET</span><span style="color: #007700">) || !</span><span style="color: #0000BB">is_numeric</span><span style="color: #007700">(</span><span style="color: #0000BB">$_GET</span><span style="color: #007700">[</span><span style="color: #DD0000">"i"</span><span style="color: #007700">]))
    die(</span><span style="color: #DD0000">"Index unspecified or non-numeric"</span><span style="color: #007700">);
</span><span style="color: #0000BB">$index </span><span style="color: #007700">= (int) </span><span style="color: #0000BB">$_GET</span><span style="color: #007700">[</span><span style="color: #DD0000">"i"</span><span style="color: #007700">];

</span><span style="color: #0000BB">$arch </span><span style="color: #007700">= </span><span style="color: #0000BB">RarArchive</span><span style="color: #007700">::</span><span style="color: #0000BB">open</span><span style="color: #007700">(</span><span style="color: #DD0000">"example.rar"</span><span style="color: #007700">);
if (</span><span style="color: #0000BB">$arch </span><span style="color: #007700">=== </span><span style="color: #0000BB">FALSE</span><span style="color: #007700">)
    die(</span><span style="color: #DD0000">"Cannot open example.rar"</span><span style="color: #007700">);

</span><span style="color: #0000BB">$entries </span><span style="color: #007700">= </span><span style="color: #0000BB">$arch</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">getEntries</span><span style="color: #007700">();
if (</span><span style="color: #0000BB">$entries </span><span style="color: #007700">=== </span><span style="color: #0000BB">FALSE</span><span style="color: #007700">)
    die(</span><span style="color: #DD0000">"Cannot retrieve entries"</span><span style="color: #007700">);

if (!</span><span style="color: #0000BB">array_key_exists</span><span style="color: #007700">(</span><span style="color: #0000BB">$index</span><span style="color: #007700">, </span><span style="color: #0000BB">$entries</span><span style="color: #007700">))
    die(</span><span style="color: #DD0000">"No such index: </span><span style="color: #0000BB">$index</span><span style="color: #DD0000">"</span><span style="color: #007700">);

</span><span style="color: #0000BB">$orfilename </span><span style="color: #007700">= </span><span style="color: #0000BB">$entries</span><span style="color: #007700">[</span><span style="color: #0000BB">$index</span><span style="color: #007700">]-&gt;</span><span style="color: #0000BB">getName</span><span style="color: #007700">(); </span><span style="color: #FF8000">//UTF-8 encoded

</span><span style="color: #0000BB">$filesize </span><span style="color: #007700">= </span><span style="color: #0000BB">$entries</span><span style="color: #007700">[</span><span style="color: #0000BB">$index</span><span style="color: #007700">]-&gt;</span><span style="color: #0000BB">getUnpackedSize</span><span style="color: #007700">();

</span><span style="color: #FF8000">/* you could check HTTP_IF_MODIFIED_SINCE here and compare with
 * $entries[$index]-&gt;getFileTime(). You could also send a
 * "Last modified" header */

</span><span style="color: #0000BB">$fp </span><span style="color: #007700">= </span><span style="color: #0000BB">$entries</span><span style="color: #007700">[</span><span style="color: #0000BB">$index</span><span style="color: #007700">]-&gt;</span><span style="color: #0000BB">getStream</span><span style="color: #007700">();
if (</span><span style="color: #0000BB">$fp </span><span style="color: #007700">=== </span><span style="color: #0000BB">FALSE</span><span style="color: #007700">)
    die(</span><span style="color: #DD0000">"Cannot open file with index </span><span style="color: #0000BB">$index</span><span style="color: #DD0000"> insided the archive."</span><span style="color: #007700">);

</span><span style="color: #0000BB">$arch</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">close</span><span style="color: #007700">(); </span><span style="color: #FF8000">//no longer needed; stream is independent

</span><span style="color: #007700">function </span><span style="color: #0000BB">detectUserAgent</span><span style="color: #007700">() {
    if (!</span><span style="color: #0000BB">array_key_exists</span><span style="color: #007700">(</span><span style="color: #DD0000">'HTTP_USER_AGENT'</span><span style="color: #007700">, </span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">))
        return </span><span style="color: #DD0000">"Other"</span><span style="color: #007700">;

    </span><span style="color: #0000BB">$uas </span><span style="color: #007700">= </span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'HTTP_USER_AGENT'</span><span style="color: #007700">];
    if (</span><span style="color: #0000BB">preg_match</span><span style="color: #007700">(</span><span style="color: #DD0000">"@Opera/@"</span><span style="color: #007700">, </span><span style="color: #0000BB">$uas</span><span style="color: #007700">))
        return </span><span style="color: #DD0000">"Opera"</span><span style="color: #007700">;
    if (</span><span style="color: #0000BB">preg_match</span><span style="color: #007700">(</span><span style="color: #DD0000">"@Firefox/@"</span><span style="color: #007700">, </span><span style="color: #0000BB">$uas</span><span style="color: #007700">))
        return </span><span style="color: #DD0000">"Firefox"</span><span style="color: #007700">;
    if (</span><span style="color: #0000BB">preg_match</span><span style="color: #007700">(</span><span style="color: #DD0000">"@Chrome/@"</span><span style="color: #007700">, </span><span style="color: #0000BB">$uas</span><span style="color: #007700">))
        return </span><span style="color: #DD0000">"Chrome"</span><span style="color: #007700">;
    if (</span><span style="color: #0000BB">preg_match</span><span style="color: #007700">(</span><span style="color: #DD0000">"@MSIE ([0-9.]+);@"</span><span style="color: #007700">, </span><span style="color: #0000BB">$uas</span><span style="color: #007700">, </span><span style="color: #0000BB">$matches</span><span style="color: #007700">)) {
        if (((float) </span><span style="color: #0000BB">$matches</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">]) &gt;= </span><span style="color: #0000BB">7.0</span><span style="color: #007700">)
            return </span><span style="color: #DD0000">"IE"</span><span style="color: #007700">;
    }

    return </span><span style="color: #DD0000">"Other"</span><span style="color: #007700">;
}

</span><span style="color: #FF8000">/*
 * We have 3 options:
 * - For FF and Opera, which support RFC 2231, use that format.
 * - For IE and Chrome, use attwithfnrawpctenclong
 *   (http://greenbytes.de/tech/tc2231/#attwithfnrawpctenclong)
 * - For the others, convert to ISO-8859-1, if possible
 */
</span><span style="color: #0000BB">$formatRFC2231 </span><span style="color: #007700">= </span><span style="color: #DD0000">'Content-Disposition: attachment; filename*=UTF-8\'\'%s'</span><span style="color: #007700">;
</span><span style="color: #0000BB">$formatDef </span><span style="color: #007700">= </span><span style="color: #DD0000">'Content-Disposition: attachment; filename="%s"'</span><span style="color: #007700">;

switch (</span><span style="color: #0000BB">detectUserAgent</span><span style="color: #007700">()) {
    case </span><span style="color: #DD0000">"Opera"</span><span style="color: #007700">:
    case </span><span style="color: #DD0000">"Firefox"</span><span style="color: #007700">:
        </span><span style="color: #0000BB">$orfilename </span><span style="color: #007700">= </span><span style="color: #0000BB">rawurlencode</span><span style="color: #007700">(</span><span style="color: #0000BB">$orfilename</span><span style="color: #007700">);
        </span><span style="color: #0000BB">$format </span><span style="color: #007700">= </span><span style="color: #0000BB">$formatRFC2231</span><span style="color: #007700">;
        break;

    case </span><span style="color: #DD0000">"IE"</span><span style="color: #007700">:
    case </span><span style="color: #DD0000">"Chrome"</span><span style="color: #007700">:
        </span><span style="color: #0000BB">$orfilename </span><span style="color: #007700">= </span><span style="color: #0000BB">rawurlencode</span><span style="color: #007700">(</span><span style="color: #0000BB">$orfilename</span><span style="color: #007700">);
        </span><span style="color: #0000BB">$format </span><span style="color: #007700">= </span><span style="color: #0000BB">$formatDef</span><span style="color: #007700">;
        break;
    default:
        if (</span><span style="color: #0000BB">function_exists</span><span style="color: #007700">(</span><span style="color: #DD0000">'iconv'</span><span style="color: #007700">))
            </span><span style="color: #0000BB">$orfilename </span><span style="color: #007700">=
                @</span><span style="color: #0000BB">iconv</span><span style="color: #007700">(</span><span style="color: #DD0000">"UTF-8"</span><span style="color: #007700">, </span><span style="color: #DD0000">"ISO-8859-1//TRANSLIT"</span><span style="color: #007700">, </span><span style="color: #0000BB">$orfilename</span><span style="color: #007700">);
        </span><span style="color: #0000BB">$format </span><span style="color: #007700">= </span><span style="color: #0000BB">$formatDef</span><span style="color: #007700">;
}

</span><span style="color: #0000BB">header</span><span style="color: #007700">(</span><span style="color: #0000BB">sprintf</span><span style="color: #007700">(</span><span style="color: #0000BB">$format</span><span style="color: #007700">, </span><span style="color: #0000BB">$orfilename</span><span style="color: #007700">));
</span><span style="color: #FF8000">//cannot send error messages from now on (headers already sent)

//replace by real content type, perhaps infering from the file extension
</span><span style="color: #0000BB">$contentType </span><span style="color: #007700">= </span><span style="color: #DD0000">"application/octet-stream"</span><span style="color: #007700">;
</span><span style="color: #0000BB">header</span><span style="color: #007700">(</span><span style="color: #DD0000">"Content-Type: </span><span style="color: #0000BB">$contentType</span><span style="color: #DD0000">"</span><span style="color: #007700">);

</span><span style="color: #0000BB">header</span><span style="color: #007700">(</span><span style="color: #DD0000">"Content-Transfer-Encoding: binary"</span><span style="color: #007700">);

</span><span style="color: #0000BB">header</span><span style="color: #007700">(</span><span style="color: #DD0000">"Content-Length: </span><span style="color: #0000BB">$filesize</span><span style="color: #DD0000">"</span><span style="color: #007700">);

if (</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'REQUEST_METHOD'</span><span style="color: #007700">] == </span><span style="color: #DD0000">"HEAD"</span><span style="color: #007700">)
    die();

while (!</span><span style="color: #0000BB">feof</span><span style="color: #007700">(</span><span style="color: #0000BB">$fp</span><span style="color: #007700">)) {
    </span><span style="color: #0000BB">$s </span><span style="color: #007700">= @</span><span style="color: #0000BB">fread</span><span style="color: #007700">(</span><span style="color: #0000BB">$fp</span><span style="color: #007700">, </span><span style="color: #0000BB">8192</span><span style="color: #007700">);
    if (</span><span style="color: #0000BB">$s </span><span style="color: #007700">=== </span><span style="color: #0000BB">false</span><span style="color: #007700">)
        break; </span><span style="color: #FF8000">//useless to send error messages

    </span><span style="color: #007700">echo </span><span style="color: #0000BB">$s</span><span style="color: #007700">;
}
</span><span style="color: #0000BB">?&gt;</span></code></pre></div>
  </div>

 </div>
 <p class="simpara">
  This example opens a RAR file and presents the requested file inside the RAR archive for download to the client.
 </p>

 <div class="example" id="example-2">
  <p><strong>Beispiel #2 RAR extension filesystem extraction example</strong></p>
  <div class="example-contents">
<div class="phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php

$rar_file </span><span style="color: #007700">= </span><span style="color: #0000BB">rar_open</span><span style="color: #007700">(</span><span style="color: #DD0000">'example.rar'</span><span style="color: #007700">) or die(</span><span style="color: #DD0000">"Can't open Rar archive"</span><span style="color: #007700">);

</span><span style="color: #0000BB">$entries </span><span style="color: #007700">= </span><span style="color: #0000BB">rar_list</span><span style="color: #007700">(</span><span style="color: #0000BB">$rar_file</span><span style="color: #007700">);

foreach (</span><span style="color: #0000BB">$entries </span><span style="color: #007700">as </span><span style="color: #0000BB">$entry</span><span style="color: #007700">) {
    echo </span><span style="color: #DD0000">'Filename: ' </span><span style="color: #007700">. </span><span style="color: #0000BB">$entry</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">getName</span><span style="color: #007700">() . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;
    echo </span><span style="color: #DD0000">'Packed size: ' </span><span style="color: #007700">. </span><span style="color: #0000BB">$entry</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">getPackedSize</span><span style="color: #007700">() . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;
    echo </span><span style="color: #DD0000">'Unpacked size: ' </span><span style="color: #007700">. </span><span style="color: #0000BB">$entry</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">getUnpackedSize</span><span style="color: #007700">() . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;

    </span><span style="color: #0000BB">$entry</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">extract</span><span style="color: #007700">(</span><span style="color: #DD0000">'/dir/extract/to/'</span><span style="color: #007700">);
}

</span><span style="color: #0000BB">rar_close</span><span style="color: #007700">(</span><span style="color: #0000BB">$rar_file</span><span style="color: #007700">);

</span><span style="color: #0000BB">?&gt;</span></code></pre></div>
  </div>

 </div>
 <p class="simpara">
  This example opens a RAR file archive and extracts each entry to the
  specified directory.
 </p>

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