<?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 => 'it',
  ),
  'this' => 
  array (
    0 => 'rar.examples.php',
    1 => 'Esempi',
    2 => 'Esempi',
  ),
  'up' => 
  array (
    0 => 'book.rar.php',
    1 => 'Rar',
  ),
  'prev' => 
  array (
    0 => 'rar.constants.php',
    1 => 'Costanti predefinite',
  ),
  'next' => 
  array (
    0 => 'ref.rar.php',
    1 => 'Rar Funzioni',
  ),
  '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">Esempi</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>Example #1 On-the-fly decompression</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">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">]))<br />    die(</span><span style="color: #DD0000">"Index unspecified or non-numeric"</span><span style="color: #007700">);<br /></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">];<br /><br /></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">);<br />if (</span><span style="color: #0000BB">$arch </span><span style="color: #007700">=== </span><span style="color: #0000BB">FALSE</span><span style="color: #007700">)<br />    die(</span><span style="color: #DD0000">"Cannot open example.rar"</span><span style="color: #007700">);<br /><br /></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">();<br />if (</span><span style="color: #0000BB">$entries </span><span style="color: #007700">=== </span><span style="color: #0000BB">FALSE</span><span style="color: #007700">)<br />    die(</span><span style="color: #DD0000">"Cannot retrieve entries"</span><span style="color: #007700">);<br /><br />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">))<br />    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">);<br /><br /></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<br /><br /></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">();<br /><br /></span><span style="color: #FF8000">/* you could check HTTP_IF_MODIFIED_SINCE here and compare with<br /> * $entries[$index]-&gt;getFileTime(). You could also send a<br /> * "Last modified" header */<br /><br /></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">();<br />if (</span><span style="color: #0000BB">$fp </span><span style="color: #007700">=== </span><span style="color: #0000BB">FALSE</span><span style="color: #007700">)<br />    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">);<br /><br /></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<br /><br /></span><span style="color: #007700">function </span><span style="color: #0000BB">detectUserAgent</span><span style="color: #007700">() {<br />    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">))<br />        return </span><span style="color: #DD0000">"Other"</span><span style="color: #007700">;<br /><br />    </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">];<br />    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">))<br />        return </span><span style="color: #DD0000">"Opera"</span><span style="color: #007700">;<br />    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">))<br />        return </span><span style="color: #DD0000">"Firefox"</span><span style="color: #007700">;<br />    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">))<br />        return </span><span style="color: #DD0000">"Chrome"</span><span style="color: #007700">;<br />    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">)) {<br />        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">)<br />            return </span><span style="color: #DD0000">"IE"</span><span style="color: #007700">;<br />    }<br /><br />    return </span><span style="color: #DD0000">"Other"</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #FF8000">/*<br /> * We have 3 options:<br /> * - For FF and Opera, which support RFC 2231, use that format.<br /> * - For IE and Chrome, use attwithfnrawpctenclong<br /> *   (http://greenbytes.de/tech/tc2231/#attwithfnrawpctenclong)<br /> * - For the others, convert to ISO-8859-1, if possible<br /> */<br /></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">;<br /></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">;<br /><br />switch (</span><span style="color: #0000BB">detectUserAgent</span><span style="color: #007700">()) {<br />    case </span><span style="color: #DD0000">"Opera"</span><span style="color: #007700">:<br />    case </span><span style="color: #DD0000">"Firefox"</span><span style="color: #007700">:<br />        </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">);<br />        </span><span style="color: #0000BB">$format </span><span style="color: #007700">= </span><span style="color: #0000BB">$formatRFC2231</span><span style="color: #007700">;<br />        break;<br /><br />    case </span><span style="color: #DD0000">"IE"</span><span style="color: #007700">:<br />    case </span><span style="color: #DD0000">"Chrome"</span><span style="color: #007700">:<br />        </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">);<br />        </span><span style="color: #0000BB">$format </span><span style="color: #007700">= </span><span style="color: #0000BB">$formatDef</span><span style="color: #007700">;<br />        break;<br />    default:<br />        if (</span><span style="color: #0000BB">function_exists</span><span style="color: #007700">(</span><span style="color: #DD0000">'iconv'</span><span style="color: #007700">))<br />            </span><span style="color: #0000BB">$orfilename </span><span style="color: #007700">=<br />                @</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">);<br />        </span><span style="color: #0000BB">$format </span><span style="color: #007700">= </span><span style="color: #0000BB">$formatDef</span><span style="color: #007700">;<br />}<br /><br /></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">));<br /></span><span style="color: #FF8000">//cannot send error messages from now on (headers already sent)<br /><br />//replace by real content type, perhaps infering from the file extension<br /></span><span style="color: #0000BB">$contentType </span><span style="color: #007700">= </span><span style="color: #DD0000">"application/octet-stream"</span><span style="color: #007700">;<br /></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">);<br /><br /></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">);<br /><br /></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">);<br /><br />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">)<br />    die();<br /><br />while (!</span><span style="color: #0000BB">feof</span><span style="color: #007700">(</span><span style="color: #0000BB">$fp</span><span style="color: #007700">)) {<br />    </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">);<br />    if (</span><span style="color: #0000BB">$s </span><span style="color: #007700">=== </span><span style="color: #0000BB">false</span><span style="color: #007700">)<br />        break; </span><span style="color: #FF8000">//useless to send error messages<br /><br />    </span><span style="color: #007700">echo </span><span style="color: #0000BB">$s</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></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>Example #2 RAR extension filesystem extraction example</strong></p>
  <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />$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">);<br /><br /></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">);<br /><br />foreach (</span><span style="color: #0000BB">$entries </span><span style="color: #007700">as </span><span style="color: #0000BB">$entry</span><span style="color: #007700">) {<br />    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">;<br />    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">;<br />    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">;<br /><br />    </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">);<br />}<br /><br /></span><span style="color: #0000BB">rar_close</span><span style="color: #007700">(</span><span style="color: #0000BB">$rar_file</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></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); ?>