mirror of
https://github.com/macintoshplus/doc-fr.git
synced 2026-03-25 17:32:07 +01:00
git-svn-id: https://svn.php.net/repository/phpdoc/fr/trunk@301171 c90b9560-bf6c-de11-be94-00142212c4b1
184 lines
4.7 KiB
XML
184 lines
4.7 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!-- $Revision$ -->
|
|
<!-- EN-Revision: 257719873bb67162f68ad4d855d259745b02378b Maintainer: yannick Status: ready -->
|
|
<!-- Reviewed: no -->
|
|
|
|
<chapter xml:id="rar.examples" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
&reftitle.examples;
|
|
|
|
<para>
|
|
Voir aussi les exemples de la section sur le gestionnaire
|
|
<link linkend="wrappers.rar"><literal>rar://</literal></link>.
|
|
</para>
|
|
|
|
<para>
|
|
<example>
|
|
<title>Décompression à la volée</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
|
|
if (!array_key_exists("i", $_GET) || !is_numeric($_GET["i"]))
|
|
die("Index non spécifié ou non numérique");
|
|
$index = (int) $_GET["i"];
|
|
|
|
$arch = RarArchive::open("example.rar");
|
|
if ($arch === FALSE)
|
|
die("Impossible d'ouvrir example.rar");
|
|
|
|
$entries = $arch->getEntries();
|
|
if ($entries === FALSE)
|
|
die("Impossible de récupérer les entrées");
|
|
|
|
if (!array_key_exists($index, $entries))
|
|
die("L'index $index n'existe pas");
|
|
|
|
$orfilename = $entries[$index]->getName(); //Encodage UTF-8
|
|
|
|
$filesize = $entries[$index]->getUnpackedSize();
|
|
|
|
/* Vous pouvez vérifier ici HTTP_IF_MODIFIED_SINCE et le comparer
|
|
* avec $entries[$index]->getFileTime(). Vous pouvez également envoyer
|
|
* un en-tête "Last modified" */
|
|
|
|
$fp = $entries[$index]->getStream();
|
|
if ($fp === FALSE)
|
|
die("Impossible d'ouvrir le fichier d'index $index depuis l'archive.");
|
|
|
|
$arch->close(); //plus nécessaire ; le flux est indépendant
|
|
|
|
function detectUserAgent() {
|
|
if (!array_key_exists('HTTP_USER_AGENT', $_SERVER))
|
|
return "Autre";
|
|
|
|
$uas = $_SERVER['HTTP_USER_AGENT'];
|
|
if (preg_match("@Opera/@", $uas))
|
|
return "Opera";
|
|
if (preg_match("@Firefox/@", $uas))
|
|
return "Firefox";
|
|
if (preg_match("@Chrome/@", $uas))
|
|
return "Chrome";
|
|
if (preg_match("@MSIE ([0-9.]+);@", $uas, $matches)) {
|
|
if (((float)$matches[1]) >= 7.0)
|
|
return "IE";
|
|
}
|
|
|
|
return "Autre";
|
|
}
|
|
|
|
/*
|
|
* Nous avons 3 options :
|
|
* - Pour FF et Opera, qui supportent RFC 2231, utilisez ce format.
|
|
* - Pour IE et Chrome, utilisez attwithfnrawpctenclong
|
|
* (http://greenbytes.de/tech/tc2231/#attwithfnrawpctenclong)
|
|
* - Pour les autres, convertissez en ISO-8859-1, si possible
|
|
*/
|
|
$formatRFC2231 = 'Content-Disposition: attachment; filename*=UTF-8\'\'%s';
|
|
$formatDef = 'Content-Disposition: attachment; filename="%s"';
|
|
|
|
switch (detectUserAgent()) {
|
|
case "Opera":
|
|
case "Firefox":
|
|
$orfilename = rawurlencode($orfilename);
|
|
$format = $formatRFC2231;
|
|
break;
|
|
|
|
case "IE":
|
|
case "Chrome":
|
|
$orfilename = rawurlencode($orfilename);
|
|
$format = $formatDef;
|
|
break;
|
|
default:
|
|
if (function_exists('iconv'))
|
|
$orfilename =
|
|
@iconv("UTF-8", "ISO-8859-1//TRANSLIT", $orfilename);
|
|
$format = $formatDef;
|
|
}
|
|
|
|
header(sprintf($format, $orfilename));
|
|
// Impossible d'envoyer les messages d'erreur à partir d'ici (les en-têtes
|
|
// ont déjà été émis)
|
|
|
|
// Remplacement par le type de contenu réel, pourquoi pas par déduction de l'extension du fichier
|
|
$contentType = "application/octet-stream";
|
|
header("Content-Type: $contentType");
|
|
|
|
header("Content-Transfer-Encoding: binary");
|
|
|
|
header("Content-Length: $filesize");
|
|
|
|
if ($_SERVER['REQUEST_METHOD'] == "HEAD")
|
|
die();
|
|
|
|
while (!feof($fp)) {
|
|
$s = @fread($fp, 8192);
|
|
if ($s === false)
|
|
break; //utile pour envoyer des messages d'erreur
|
|
|
|
echo $s;
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
Cet exemple ouvre l'archive RAR et extrait chacune des entrées dans
|
|
un dossier spécifié.
|
|
</para>
|
|
|
|
<para>
|
|
<example>
|
|
<title>Exemple d'extractions RAR</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
|
|
$rar_file = rar_open('example.rar') or die("Can't open Rar archive");
|
|
|
|
$entries = rar_list($rar_file);
|
|
|
|
foreach ($entries as $entry) {
|
|
echo 'Nom du fichier : ' . $entry->getName() . "\n";
|
|
echo 'Taille de l'archive : ' . $entry->getPackedSize() . "\n";
|
|
echo 'Taille après décompression : ' . $entry->getUnpackedSize() . "\n";
|
|
|
|
$entry->extract('/dir/extract/to/');
|
|
}
|
|
|
|
rar_close($rar_file);
|
|
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
Cet exemple ouvre une archive RAR et extrait chaque entrée dans le
|
|
dossier spécifié.
|
|
</para>
|
|
|
|
</chapter>
|
|
|
|
<!-- Keep this comment at the end of the file
|
|
Local variables:
|
|
mode: sgml
|
|
sgml-omittag:t
|
|
sgml-shorttag:t
|
|
sgml-minimize-attributes:nil
|
|
sgml-always-quote-attributes:t
|
|
sgml-indent-step:1
|
|
sgml-indent-data:t
|
|
indent-tabs-mode:nil
|
|
sgml-parent-document:nil
|
|
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
|
sgml-exposed-tags:nil
|
|
sgml-local-catalogs:nil
|
|
sgml-local-ecat-files:nil
|
|
End:
|
|
vim600: syn=xml fen fdm=syntax fdl=2 si
|
|
vim: et tw=78 syn=sgml
|
|
vi: ts=1 sw=1
|
|
-->
|
|
|