downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

Sessions et sécurité> <Gestion personnalisée des sessions
[edit] Last updated: Fri, 25 May 2012

view this page in

Progression d'un téléchargement en session

Lorsque l'option de configuration session.upload_progress.enabled 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 XHR par exemple) pour vérifier le statut de ce téléchargement.

La progression de téléchargement sera disponible dans la variable super-global $_SESSION 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 session.upload_progress.name. Lorsque PHP détecte une requête POST de ce type, il remplira un tableau dans $_SESSION, où l'index est une valeur concaténée des options de configuration session.upload_progress.prefix et session.upload_progress.name. La clé est typiquement récupérée en lisant ces configurations INI, i.e.

<?php
$key 
ini_get("session.upload_progress.prefix") . ini_get("session.upload-progress.name");
var_dump($_SESSION[$key]);
?>

Il est également possible d'annuler le téléchargement courant en définissant la clé $_SESSION[$key]["cancel_upload"] à la valeur TRUE. 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é error du tableau $_FILES sera définie à UPLOAD_ERR_EXTENSION.

Les options de configuration INI session.upload_progress.freq et session.upload_progress.min_freq 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.

Exemple #1 Exemple

Exemple de structure du tableau contenant les informations de téléchargement.

<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>

Les données stockées en session ressembleront à :

<?php
$_SESSION
["upload_progress_123"] = array(
 
"start_time" => 1234567890,   // L'heure de la requête
 
"content_length" => 57343257// Longueur du contenu POST
 
"bytes_processed" => 453489,  // Quantité d'octets reçus et traités
 
"done" => false,              // true lorsque le gestionnaire POST a terminé, avec succès ou non
 
"files" => array(
  
=> array(
   
"field_name" => "file1",       // Nom du champ <input/>
   // Les 3 éléments suivants sont équivalents à ceux dans $_FILES
   
"name" => "foo.avi",
   
"tmp_name" => "/tmp/phpxxxxxx",
   
"error" => 0,
   
"done" => true,                // True lorsque le gestionnaire POST a terminé de gérer ce fichier
   
"start_time" => 1234567890,    // L'heure de début de requête
   
"bytes_processed" => 57343250// Quantité d'octets reçus et traités pour ce fichier
  
),
  
// Un autre fichier, en cours de téléchargement, dans la même requête
  
=> array(
   
"field_name" => "file2",
   
"name" => "bar.avi",
   
"tmp_name" => NULL,
   
"error" => 0,
   
"done" => false,
   
"start_time" => 1234567899,
   
"bytes_processed" => 54554,
  ),
 )
);



add a note add a note User Contributed Notes Progression d'un téléchargement en session
wojbach at o2 dot pl 05-Mar-2012 05:41
"session.upload-progress.name" -> whether here shouldn't be a underscore instead of a dash
powtac at gmx dot de 02-Mar-2012 01:35
takeone 02-Dec-2011 12:12
IE6 does not inherit session when you launch new browser from start menu or shortcut.It's the feature.
It is recommended that upload form and progress bar are on same window.
gerd dot randolf at web dot de 09-Nov-2011 12:29
Note that this will be available from PHP 5.4 on. It won't work in PHP 5.3 or earlier.

 
show source | credits | stats | sitemap | contact | advertising | mirror sites