<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <title>Examples</title> </head> <body><div class="manualnavbar" style="text-align: center;"> <div class="prev" style="text-align: left; float: left;"><a href="rar.constants.html">Predefined Constants</a></div> <div class="next" style="text-align: right; float: right;"><a href="ref.rar.html">Rar Functions</a></div> <div class="up"><a href="book.rar.html">Rar</a></div> <div class="home"><a href="index.html">PHP Manual</a></div> </div><hr /><div id="rar.examples" class="chapter"> <h1>Examples</h1> <p class="para"> See also the examples under <a href="wrappers.rar.html" class="link"><em>rar://</em> wrapper</a>. </p> <p class="para"> <div class="example" id="example-743"> <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"><?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">-></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">]-></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">]-></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]->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">]-></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">-></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">]) >= </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">?></span> </span> </code></div> </div> </div> </p> <p class="para"> This example opens a RAR file and presents the requested file inside the RAR archive for download to the client. </p> <p class="para"> <div class="example" id="example-744"> <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"><?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">-></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">-></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">-></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">-></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">?></span> </span> </code></div> </div> </div> </p> <p class="para"> This example opens a RAR file archive and extracts each entry to the specified directory. </p> </div> <hr /><div class="manualnavbar" style="text-align: center;"> <div class="prev" style="text-align: left; float: left;"><a href="rar.constants.html">Predefined Constants</a></div> <div class="next" style="text-align: right; float: right;"><a href="ref.rar.html">Rar Functions</a></div> <div class="up"><a href="book.rar.html">Rar</a></div> <div class="home"><a href="index.html">PHP Manual</a></div> </div></body></html>