Source of: /manual/fr/session.upload-progress.php
<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/book.session.inc";
$setup = array (
'home' =>
array (
0 => 'index.php',
1 => 'PHP Manual',
),
'head' =>
array (
0 => 'UTF-8',
1 => 'fr',
),
'this' =>
array (
0 => 'session.upload-progress.php',
1 => 'Progression d\'un téléchargement en session',
),
'up' =>
array (
0 => 'book.session.php',
1 => 'Sessions',
),
'prev' =>
array (
0 => 'session.customhandler.php',
1 => 'Gestion personnalisée des sessions',
),
'next' =>
array (
0 => 'session.security.php',
1 => 'Sessions et sécurité',
),
'alternatives' =>
array (
),
);
$setup["toc"] = $TOC;
$setup["parents"] = $PARENTS;
manual_setup($setup);
manual_header();
?>
<div id="session.upload-progress" class="chapter">
<h1>Progression d'un téléchargement en session</h1>
<p class="para">
Lorsque l'option de configuration
<a href="session.configuration.php#ini.session.upload-progress.enabled" class="link">session.upload_progress.enabled</a>
est active, PHP sera capable de traquer la progression d'un fichier en
cours de téléchargement. Cette information n'est pas particulièrement utile
pour la requête de téléchargement en tant que tel, mais pendant le téléchargement,
une application peut envoyer une requête POST séparée (via
<acronym>XHR</acronym> par exemple) pour vérifier le statut de ce téléchargement.
</p>
<p class="para">
La progression de téléchargement sera disponible dans la variable super-global
<var class="varname"><var class="varname"><a href="reserved.variables.session.php" class="classname">$_SESSION</a></var></var> lorsque le téléchargement est en cours,
et lors d'un envoi en méthode POST d'une variable du même nom que celui
définit dans l'option de configuration INI
<a href="session.configuration.php#ini.session.upload-progress.name" class="link">session.upload_progress.name</a>.
Lorsque PHP détecte une requête POST de ce type, il remplira un tableau dans
<var class="varname"><var class="varname"><a href="reserved.variables.session.php" class="classname">$_SESSION</a></var></var>, où l'index est une valeur concaténée des options
de configuration
<a href="session.configuration.php#ini.session.upload-progress.prefix" class="link">session.upload_progress.prefix</a>
et
<a href="session.configuration.php#ini.session.upload-progress.name" class="link">session.upload_progress.name</a>.
La clé est typiquement récupérée en lisant ces configurations INI, i.e.
<div class="informalexample">
<div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB"><?php<br />$key </span><span style="color: #007700">= </span><span style="color: #0000BB">ini_get</span><span style="color: #007700">(</span><span style="color: #DD0000">"session.upload_progress.prefix"</span><span style="color: #007700">) . </span><span style="color: #0000BB">$_POST</span><span style="color: #007700">[</span><span style="color: #0000BB">ini_get</span><span style="color: #007700">(</span><span style="color: #DD0000">"session.upload_progress.name"</span><span style="color: #007700">)];<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$_SESSION</span><span style="color: #007700">[</span><span style="color: #0000BB">$key</span><span style="color: #007700">]);<br /></span><span style="color: #0000BB">?></span>
</span>
</code></div>
</div>
</div>
</p>
<p class="para">
Il est également possible d'<em class="emphasis">annuler</em> le téléchargement courant
en définissant la clé <em>$_SESSION[$key]["cancel_upload"]</em> à la valeur
<strong><code>TRUE</code></strong>. Lors du téléchargement de plusieurs fichiers dans la même
requête, cette action n'annulera que le fichier actuellement en cours de téléchargement,
ainsi que ceux en attente de téléchargement mais n'annulera pas les téléchargements
terminés avec succès. Lorsqu'un téléchargement est annulé en utilisant cette méthode,
la clé <em>error</em> du tableau <var class="varname"><var class="varname"><a href="reserved.variables.files.php" class="classname">$_FILES</a></var></var> sera définie à
<strong><code>UPLOAD_ERR_EXTENSION</code></strong>.
</p>
<p class="para">
Les options de configuration INI
<a href="session.configuration.php#ini.session.upload-progress.freq" class="link">session.upload_progress.freq</a>
et
<a href="session.configuration.php#ini.session.upload-progress.min-freq" class="link">session.upload_progress.min_freq</a>
contrôlent la fréquence de mise à jour des informations de progression de téléchargement.
Avec une configuration raisonnable de ces 2 options, la surcoût en terme
de charge est quasi nul.
</p>
<p class="para">
<div class="example" id="example-4659">
<p><strong>Exemple #1 Exemple</strong></p>
<div class="example-contents"><p>
Exemple de structure du tableau contenant les informations de
téléchargement.
</p></div>
<div class="example-contents">
<div class="htmlcode"><pre class="htmlcode"><form action="upload.php" method="POST" enctype="multipart/form-data">
<input type="hidden" name="<?php echo ini_get("session.upload_progress.name"); ?>" value="123" />
<input type="file" name="file1" />
<input type="file" name="file2" />
<input type="submit" />
</form></pre>
</div>
</div>
<div class="example-contents"><p>
Les données stockées en session ressembleront à :
</p></div>
<div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB"><?php<br />$_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">"upload_progress_123"</span><span style="color: #007700">] = array(<br /> </span><span style="color: #DD0000">"start_time" </span><span style="color: #007700">=> </span><span style="color: #0000BB">1234567890</span><span style="color: #007700">, </span><span style="color: #FF8000">// L'heure de la requête<br /> </span><span style="color: #DD0000">"content_length" </span><span style="color: #007700">=> </span><span style="color: #0000BB">57343257</span><span style="color: #007700">, </span><span style="color: #FF8000">// Longueur du contenu POST<br /> </span><span style="color: #DD0000">"bytes_processed" </span><span style="color: #007700">=> </span><span style="color: #0000BB">453489</span><span style="color: #007700">, </span><span style="color: #FF8000">// Quantité d'octets reçus et traités<br /> </span><span style="color: #DD0000">"done" </span><span style="color: #007700">=> </span><span style="color: #0000BB">false</span><span style="color: #007700">, </span><span style="color: #FF8000">// true lorsque le gestionnaire POST a terminé, avec succès ou non<br /> </span><span style="color: #DD0000">"files" </span><span style="color: #007700">=> array(<br /> </span><span style="color: #0000BB">0 </span><span style="color: #007700">=> array(<br /> </span><span style="color: #DD0000">"field_name" </span><span style="color: #007700">=> </span><span style="color: #DD0000">"file1"</span><span style="color: #007700">, </span><span style="color: #FF8000">// Nom du champ <input/><br /> // Les 3 éléments suivants sont équivalents à ceux dans $_FILES<br /> </span><span style="color: #DD0000">"name" </span><span style="color: #007700">=> </span><span style="color: #DD0000">"foo.avi"</span><span style="color: #007700">,<br /> </span><span style="color: #DD0000">"tmp_name" </span><span style="color: #007700">=> </span><span style="color: #DD0000">"/tmp/phpxxxxxx"</span><span style="color: #007700">,<br /> </span><span style="color: #DD0000">"error" </span><span style="color: #007700">=> </span><span style="color: #0000BB">0</span><span style="color: #007700">,<br /> </span><span style="color: #DD0000">"done" </span><span style="color: #007700">=> </span><span style="color: #0000BB">true</span><span style="color: #007700">, </span><span style="color: #FF8000">// True lorsque le gestionnaire POST a terminé de gérer ce fichier<br /> </span><span style="color: #DD0000">"start_time" </span><span style="color: #007700">=> </span><span style="color: #0000BB">1234567890</span><span style="color: #007700">, </span><span style="color: #FF8000">// L'heure de début de requête<br /> </span><span style="color: #DD0000">"bytes_processed" </span><span style="color: #007700">=> </span><span style="color: #0000BB">57343250</span><span style="color: #007700">, </span><span style="color: #FF8000">// Quantité d'octets reçus et traités pour ce fichier<br /> </span><span style="color: #007700">),<br /> </span><span style="color: #FF8000">// Un autre fichier, en cours de téléchargement, dans la même requête<br /> </span><span style="color: #0000BB">1 </span><span style="color: #007700">=> array(<br /> </span><span style="color: #DD0000">"field_name" </span><span style="color: #007700">=> </span><span style="color: #DD0000">"file2"</span><span style="color: #007700">,<br /> </span><span style="color: #DD0000">"name" </span><span style="color: #007700">=> </span><span style="color: #DD0000">"bar.avi"</span><span style="color: #007700">,<br /> </span><span style="color: #DD0000">"tmp_name" </span><span style="color: #007700">=> </span><span style="color: #0000BB">NULL</span><span style="color: #007700">,<br /> </span><span style="color: #DD0000">"error" </span><span style="color: #007700">=> </span><span style="color: #0000BB">0</span><span style="color: #007700">,<br /> </span><span style="color: #DD0000">"done" </span><span style="color: #007700">=> </span><span style="color: #0000BB">false</span><span style="color: #007700">,<br /> </span><span style="color: #DD0000">"start_time" </span><span style="color: #007700">=> </span><span style="color: #0000BB">1234567899</span><span style="color: #007700">,<br /> </span><span style="color: #DD0000">"bytes_processed" </span><span style="color: #007700">=> </span><span style="color: #0000BB">54554</span><span style="color: #007700">,<br /> ),<br /> )<br />);</span>
</span>
</code></div>
</div>
</div>
</p>
</div>
<?php manual_footer(); ?>