Upload de fichiers vérification renommage redimensionnements

ViPHP
AB
ViPHP | 5818 Messages

20 mai 2011, 18:13

Après avoir re vérifié le bon fonctionnement avec FF 3.6.10 (OK) je viens de vérifier avec la dernière version V3 disponible soit la 3.6.17 et c'est toujours OK. Donc soit il y avait un pb spécifique sur la version 3.6.13 avec l'option "multiple", ou alors on fait pas les mêmes tests :-k

Avatar de l’utilisateur
ViPHP
xTG
ViPHP | 7334 Messages

20 mai 2011, 20:43

Beh en même temps il y a pas 36 tests. :D

Code : Tout sélectionner

<input type="file" name="fichier" multiple="multiple" />

Code : Tout sélectionner

<input type="file" name="fichier" multiple />
Aucun des deux ne fonctionnait. :)

ViPHP
AB
ViPHP | 5818 Messages

20 mai 2011, 21:46

Beh en même temps il y a pas 36 tests. :D

Code : Tout sélectionner

<input type="file" name="fichier" multiple="multiple" />

Code : Tout sélectionner

<input type="file" name="fichier" multiple />
Aucun des deux ne fonctionnait. :)
Dans mon exemple j'utilise : multiple="true" car c'est la syntaxe indiquée dans la doc mozilla bien que j'ai eu naturellement tendance à mettre multiple="multiple" ce qui fonctionne d'ailleurs tout aussi bien.
Quant au test il consiste simplement, après avoir cliqué sur "parcourir", à pouvoir sélectionner deux ou plusieurs fichiers en maintenant la touche Ctrl enfoncée. Ou alors la version diffère un peu suivant le système d'exploitation, perso j'utilise encore XP.

Avatar de l’utilisateur
ViPHP
xTG
ViPHP | 7334 Messages

21 mai 2011, 09:26

Windows XP au boulot aussi.
Je testerai avec le multiple = true, car ça me turlupine cette histoire ! :|

Avatar de l’utilisateur
Modérateur PHPfrance
Modérateur PHPfrance | 8675 Messages

23 mai 2011, 22:03

Je viens de tester deux versions de firefox (3.6.12 et 3.6.17) sur ma VM XP et pas de soucis, c'est avec iceweasel (3.5.16) qui est la version debian de firefox, celui est basé sur la version 3.5.16 de firefox qui peut être ne contenait pas encore cette possibilité la ;)

test avec icecat 4.0.1 (basée sur firefox 4) ok avec multiple, multiple="multiple" et multiple="true", reste a trouver une parade pour IE :d

@+
Il en faut peu pour être heureux ......

ViPHP
AB
ViPHP | 5818 Messages

14 juin 2011, 01:22

Bonjour,

Pour répondre à tous les besoins de l'upoad multiple, y compris pour les navigateurs ne supportant pas l'attribut "multiple", voici un exemple complet avec une fonction javascript qui ajoute des champs multiples à la demande.

A noter que cette fonction est également utile pour les navigateurs supportant cet attribut car la sélection multiple n'est possible que pour les fichiers d'un même répertoire.
<?php
// Appel de la classe
require('Classe_Upload.php');

//Si on travaille en utf-8
header('Content-type: text/html; charset=UTF-8');


// Déclaration de la classe avec envoi des paramètres (cf doc)
$form = new Telechargement ('PHOTO','envoi_file','photo','get_form_1');

// option : contrôle que le fichier est une image de type gif, jpg, jpeg ou png (et retourne ses dimensions dans le tableau des résultats - tableau non exploité dans l'exemple ci-dessous)
$form->Set_Controle_dimImg ();

//option pour renommer le fichier en mode incrémentiel si un fichier de même nom existe déjà sur le serveur
$form->Set_Renomme_fichier ('incr');


//Téléchargement sans traitement php supplémentaire -> on spécifie un rechargement de la page suite au téléchargement en indiquant un argument non nul ex 'reload' dans la fonction d'Upload.
$form->Upload ('reload');


// Enregistrement des messages de contrôle
$messages_form = $form->Get_Tab_message ();

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>

<script type="text/JavaScript">
<!--
function Attente_Load(id_attente)// écrit patientez durant le téléchargement
    {              
        var id_attente = document.getElementById(id_attente);
       
        if (id_attente)
        {
	    id_attente.innerHTML = 'Patientez...';  
			                             
            id_attente.style.fontWeight="bold";
            id_attente.style.fontSize="1.5em";         
        }
    }
 
 
	
function Add_Load_File(id_content_file) // Ajoute un champ de téléchargement
	{
		var content_file = document.getElementById(id_content_file);
				
		var tab = content_file ? content_file.getElementsByTagName('input') : new Array();
		
		if(tab.length > 0) 
		{
		 	var input = tab[0].cloneNode(true);
			input.value = '';
			content_file.appendChild(input);
		}	
	}
-->
</script>
<style type="text/css">
body {
font-family:Arial, Helvetica, sans-serif;
font-size:1em;
}

p, input, form {
margin:0;
padding:0;
}

#bord_form {
width:700px;
margin:auto;
border:5px  double #999999;
padding-top:1em;
padding-bottom:1em;
}

#content_form {
width:650px;
margin:auto;
font-size:0.8em;
}

.info p {
margin-top:0.3em;
}

#form_file {
text-align:right;
}

#form_file p {
margin-top:1.5em;
}

#form_file #champ_file input  {
margin-top:0.3em;
padding:0;
height:1.8em;
width:100%;
}

#form_file #add_load_file {
font-size:0.85em;
text-decoration:underline; 
cursor:pointer;
}

#form_file #envoyer {
width:8em;
height:2.5em;
font-weight:bold;
}

#message_tele {
margin-top:1em;
}
</style>


</head>

<body>

<div id = "bord_form">

	<div id = "content_form">
	
		<div class = "info">
		<p>Fichiers autorisés "jpg", "jpeg", "gif", "png".</p>
		
		<p>Taille maximum de fichier autorisée par le serveur = <?php echo ini_get('upload_max_filesize').'o'?>.&nbsp;&nbsp;Total maximum pour l'ensemble <?php echo ini_get('post_max_size').'o'?>.</p>
		</div>
		
		<form id = "form_file" enctype = "multipart/form-data" action = "<?php echo htmlspecialchars($_SERVER['PHP_SELF']).'?get_form_1=1'?>" method = "post" onsubmit = "Attente_Load('message_tele')">
		
		<p id = "champ_file"><input type = "file" name = "photo[]"  size="90" multiple = "multiple" /></p>
				   
		<p id = "add_load_file" onclick = "Add_Load_File('champ_file')">Ajouter un champ de téléchargement</p>
		
		<p><input type = "submit" name = "envoi_file" value = "Envoyez" id = "envoyer" /></p>
		
		</form>
		
		<div id = "message_tele" class = "info">
				   
					<?php if (isset($messages_form))
					foreach ($messages_form as $num)
							{
									foreach ($num as $value)
									echo '<p>- '.htmlspecialchars($value).'</p>';
							}
					?>
		</div>
	
	</div>
	
</div>

</body>
Note : (pour les visiteurs qui commencent à lire les topics par la fin)

Dans l'exemple complet ci-dessus, l'instanciation de la classe indique (en premier argument) le répertoire "PHOTO" comme nom de destination des fichiers. Remplacer ce nom par un nom de dossier valide sur votre site - chemin par rapport au dossier www - sans quoi vous obtiendrez un message d'erreur dès le chargement de la page.

Petit nouveau ! | 4 Messages

28 juin 2011, 08:34

Bonjour à tous!

J'avais initié la discussion sur le multiple il y a quelques temps et dans la même lignée je reviens avec un complément à cette question. Voilà, l'upload multiple est utilisé dans une interface de maintenance d'un site. Afin d'accélérer le processus d'upload (surtout si j'ai 30 fichiers ou plus) et peut être être plus performant, je souhaiterais au lieu de faire un upload HTTP utiliser ftp notamment avec un code similaire à celui-ci:
 <?php
// Mise en place d'une connexion basique
$conn_id = ftp_connect($ftp_server);

// Identification avec un nom d'utilisateur et un mot de passe
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);

// Vérification de la connexion
if ((!$conn_id) || (!$login_result)) {
    echo "La connexion FTP a échoué !";
    echo "Tentative de connexion au serveur $ftp_server pour l'utilisateur $ftp_user_name";
    exit;
} else {
    echo "Connexion au serveur $ftp_server, pour l'utilisateur $ftp_user_name";
}

// Chargement d'un fichier
$upload = ftp_put($conn_id, $destination_file, $source_file, FTP_BINARY); 

// Vérification du status du chargement
if (!$upload) {
    echo "Le chargement FTP a échoué!";
} else {
    echo "Chargement de $source_file vers $ftp_server en tant que $destination_file";
}

// Fermeture du flux FTP
ftp_close($conn_id);
?> 
Mon but est d'intégrer ce code à la classe classe_upload.php (je sais pas encore exactement où) mais avant tout pensez-vous qu'il y a un intérêt à intégrer le ftp pour améliorer la performance?

Merci

ViPHP
AB
ViPHP | 5818 Messages

29 juin 2011, 08:44

mais avant tout pensez-vous qu'il y a un intérêt à intégrer le ftp pour améliorer la performance?
Merci
Aucun puisque tu dois charger les fichiers dans le formulaire.

Petit nouveau ! | 4 Messages

29 juin 2011, 09:26

Actuellement, je charge par exemple 20 fichiers avec le formulaire. Ce que je souhaite faire, c'est récupérer la liste de ces fichiers et au lieu de les transférer au moyen du protocole HTTP c'est d'utiliser le protocole FTP.Une fois c'est fichier chargé, alors je les redimensionne selon mes besoins. Donc pour moi le formulaire n'est pas un frein...faux?

J'ai pensé à cette solution car l'upload de 20 fichiers amène à des problèmes de limite de transfert. Si j'utilise FTP par contre non. Je me plante complètement ou pas?

Avatar de l’utilisateur
ViPHP
xTG
ViPHP | 7334 Messages

29 juin 2011, 12:22

Le souci c'est que pour utiliser des commandes ftp il faut passer par une interface client le permettant.
Or Javascript ne le permet pas.
Donc pour faire du ftp tu devra uploader tes fichiers sur un serveur puis utiliser les fonctions ftp fournies par PHP pour faire le transfert vers... Le même serveur... 8-|
Quant au protocole ftp directement dans l'url de destination cela ne fonctionne que pour une connexion il me semble, il faudra par la suite copier/coller les fichiers manuellement.

ViPHP
AB
ViPHP | 5818 Messages

30 juin 2011, 21:47

Pour profiter du transfert ftp il faut un logiciel ou plugin installé sur la machine du visiteur. Cela peut se faire en java (java, pas javascript) mais alors ce n'est plus du php et il faut que java soit installé sur la machine du visiteur. Mais bon tu peux aussi proposer d'utiliser FileZilla...

Par rapport au protocole http tu ne gagneras pas beaucoup en vitesse mais effectivement tu ne seras pas soumis aux paramètre "post_max_size" du serveur . Donc comme déjà dit, pour les très gros fichiers ou pour un grand nombre de fichiers et si on veut une solution autonome en php, il faut pouvoir modifier ce paramètre (réglé actuellement par défaut vers 8Mo mais certains mutualisés proposent 50Mo). Cela dit on peut déjà l'afficher (comme dans mes premiers exemples) ce qui donne une indication à ne pas dépasser... et pour une série d'images, on peut déjà les traiter rapidement avec un logiciel photo pour qu'elles soient moins lourdes avant téléchargement.

Eléphanteau du PHP | 49 Messages

18 oct. 2011, 19:41

Salut AB, super les explications. J'ai pour ma part un probleme avec un formulaire, j'aimerai que tu y jette un oeil si tu as le temps. Je l'ai posté ici:
Index du forum› PHP › PHP débutant
probleme de reception d'email via un formulaire
de cite carter le 13 Oct 2011

Avatar de l’utilisateur
Modérateur PHPfrance
Modérateur PHPfrance | 8675 Messages

19 oct. 2011, 09:00

Comme déjà indiqué debogue ton code on ne va le faire pour toi et tu a déjà des pistes !
Il en faut peu pour être heureux ......

ViPHP
AB
ViPHP | 5818 Messages

24 juin 2012, 07:18

J'ai mozilla Firefox 3.6.13 au boulot et cela ne fonctionne pas. :mrgreen:
Beh en même temps il y a pas 36 tests. :D

Code : Tout sélectionner

<input type="file" name="fichier" multiple="multiple" />

Code : Tout sélectionner

<input type="file" name="fichier" multiple />
Aucun des deux ne fonctionnait. :)
Réponse un peu tardive - à peine plus d'un an :mrgreen: - mais que je relève cependant pour ceux qui auraient ce problème pour l'upload multiple à partir d'un seul champ de formulaire (sous entendu pour les navigateurs compatibles). Comme déjà indiqué ici - c'était donc une petite faute d'inattention de la part de xTG et une aussi de ma part de ne pas avoir trouvé l'erreur facilement tellement c'était évident - pour que la classe gère l'upload multiple (avec un ou plusieurs champs) il suffit d'écrire le nom du (ou des) champ avec la notation tableau[].

Soit :

Code : Tout sélectionner

<input type="file" name="fichier[]" multiple="multiple" />
Voilà :D

Pour conclure, on peut écrire le champ de type file avec la notation tableau dans tous les cas : pour un téléchargement multiple ou unique. Par contre, sans la notation tableau, la classe ne fera qu'un téléchargement unique.

ViPHP
AB
ViPHP | 5818 Messages

03 sept. 2012, 02:28

Bonjour,

php 5.4 nous offre désormais la possibilité d'avoir des informations sur la progression d'un upload via une variable de session. En faisant une requête ajax il est donc possible d'afficher des informations textuelles et/ou une barre de progression pour indiquer l'avancement de l'upload.

Dans le script ci-dessous, je reprend mon dernier exemple en y ajoutant une barre de progression et l'information du temps restant.

Vous remarquerez que le code php reste identique. Le code javascript a été complété pour faire les requêtes ajax et le code html pour inclure l'input d'identification de la variable de session et le div d'affichage de la progression. Des liens vers des fichiers javascript ont également été ajoutés comme indiqué ci-dessous :

J'utilise jquery par simplification car il peut nous fournir une barre de progression prête à l'emploi.
En plus de jquery vous devrez donc télécharger les fichiers "jquery.ui.core.min.js", "jquery.ui.widget.min.js", "jquery.ui.progressbar.min.js", et "jquery-ui-1.8.23.custom.css" (ou équivalent suivant la version).
Vous trouverez ces fichiers en allant sur http://jqueryui.com/download puis cliquez sur "Deselect all components" pour commencer, puis sélectionnez simplement "Progressbar" puis faites le download. Ces fichiers se trouvent quelque part dans le dossier que vous aurez décompressé. Dans mon exemple j'ai mis ces fichiers dans un dossier nommé "Script" pour les fichiers javascript, et "librairie" pour le dossier "ui-lightness" (qui contient des fichiers css et des images).
Si vous voulez une barre de progression animée regardez mon commentaire dans le code css du script.

<?php
// Appel de la classe
require('Classe_Upload.php');

//Si on travaille en utf-8
header('Content-type: text/html; charset=UTF-8');


// Déclaration de la classe avec envoi des paramètres (cf doc)
$form = new Telechargement ('PHOTO','envoi_file','photo','get_form_1');

// option : contrôle que le fichier est une image de type gif, jpg, jpeg ou png (et retourne ses dimensions dans le tableau des résultats)
$form->Set_Controle_dimImg ();

//option pour renommer le fichier en mode incrémentiel si un fichier de même nom existe déjà sur le serveur
$form->Set_Renomme_fichier ('incr');


//Téléchargement sans traitement php supplémentaire -> on spécifie un rechargement de la page suite au téléchargement en indiquant un argument non nul ex 'reload' dans la fonction d'Upload.
$form->Upload ('reload');


// Enregistrement des messages de contrôle
$messages_form = $form->Get_Tab_message ();

?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8" />
<title>Classe Upload php et barre de progression avec jquery et php >= 5.4</title>
<!--Chargement de la librairie jquery-->
<script  src = "Scripts/jquery.js" type="text/javascript"></script>

<!--Chargement des fichiers jquery nécessaires à l'affichage de la barre de progression-->
<script  src="Scripts/jquery.ui.core.min.js" type="text/javascript"></script>
<script  src="Scripts/jquery.ui.widget.min.js" type="text/javascript"></script>
<script  src="Scripts/jquery.ui.progressbar.min.js" type="text/javascript"></script>
<link rel="stylesheet" type="text/css" href="librairie/ui-lightness/jquery-ui-1.8.23.custom.css"/>

<script type="text/JavaScript">
<!--

function Add_Load_File(id_content_file) // Ajoute un champ de téléchargement
	{
		var content_file = document.getElementById(id_content_file);
				
		var tab = content_file ? content_file.getElementsByTagName('input') : new Array();
		
		if(tab.length > 0) 
		{
		 	var input = tab[0].cloneNode(true);
			input.value = '';
			content_file.appendChild(input);
		}	
	}
	
	
$(function() // Message "patientez" puis affichage de la progression texte et graphique
	{
		var echec = 0;
		
		function Upload_progress (session_name)
		{
			$.ajax({
				dataType: "json",		
				type: "POST",
				url: "upload_progression_ajax.php",
				data: 'session_progress='+session_name,
				
				success: function(result)
					{
						var ratio = parseInt(result['ratio']);
						var temps_restant = result['temps_restant'];
						var etat = parseInt(result['etat']);
						var version_php = parseInt(result['php']);
						
						if (version_php == 1)
						{
							if(temps_restant != 'nd')
							{
								echec = 0;
								
								$("#message_tele").text(ratio+'% effectués, temps restant approximatif : '+temps_restant);
								
								if ($.isFunction($("#progressbar").progressbar))
								{
									$("#progressbar").progressbar({value: ratio});
								}
								
								if(etat == 0)
								{
									setTimeout(function() {Upload_progress (session_name);}, 2000);
								}
							}
							else
							{
								echec++;
								if(echec > 1) 
								{
									window.location.reload(true);
								}
								else
								{
									setTimeout(function() {Upload_progress (session_name);}, 2000);
								}
							}
						}
					}
			});
			
		}
		
		var input_session = $("#session_progression");
		
		var session_name = input_session.attr("data-prefix")+input_session.val();
		
		$("#form_file").on("submit",function(){
										
			$("#message_tele").html('<span style="font-weight:bold">Veuillez patienter...</span>');							
			setTimeout(function() {Upload_progress (session_name);}, 2000);
			
		});
		
	});
-->
</script>
<style type="text/css">
/*pour avoir une barre de progression animée. Attention l'image "pbar-ani.gif" n'est pas par défaut dans "ui-lightness/images", je l'ai copiée dans ce dossier depuis "development-bundle\demos\progressbar\images"*/
.ui-progressbar .ui-progressbar-value { 
	background-image: url(librairie/ui-lightness/images/pbar-ani.gif); 
}
</style>

<style type="text/css">
body {
font-family:Arial, Helvetica, sans-serif;
font-size:1em;
}

p, input, form {
margin:0;
padding:0;
}

#bord_form {
width:700px;
margin:auto;
border:5px  double #999999;
padding-top:1em;
padding-bottom:1em;
}

#content_form {
width:650px;
margin:auto;
font-size:0.8em;
}

.info p {
margin-top:0.3em;
}

#form_file {
text-align:right;
}

#form_file p {
margin-top:1.5em;
}

#form_file #champ_file input  {
margin-top:0.3em;
padding:0;
height:1.8em;
width:100%;
}

#form_file #add_load_file {
font-size:0.85em;
text-decoration:underline; 
cursor:pointer;
}

#form_file #envoyer {
width:8em;
height:2.5em;
font-weight:bold;
}

#message_tele {
margin-top:1em;
}

#progressbar {
margin-top:1em;
width:45%;	
height:1em;
}
</style>


</head>

<body>

<div id = "bord_form">

	<div id = "content_form">
	
		<div class = "info">
		<p>Fichiers autorisés "jpg", "jpeg", "gif", "png".</p>
		
		<p>Taille maximum de fichier autorisée par le serveur = <?php echo ini_get('upload_max_filesize').'o'?>.&nbsp;&nbsp;Total maximum pour l'ensemble <?php echo ini_get('post_max_size').'o'?>.</p>
		</div>
		
		<form id = "form_file" enctype = "multipart/form-data" action = "<?php echo htmlspecialchars($_SERVER['PHP_SELF']).'?get_form_1=1'?>" method = "post">
		
		<input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $form->Return_Octets(ini_get('upload_max_filesize'))?>" />
        
		<input id = "session_progression" type = "hidden" data-prefix = "<?php echo ini_get("session.upload_progress.prefix"); ?>" name="<?php echo ini_get("session.upload_progress.name"); ?>" value="<?php echo uniqid()?>" />
        		
		<p id = "champ_file"><input type = "file" name = "photo[]"  size="90" multiple = "multiple" /></p>
				   
		<p id = "add_load_file" onClick="Add_Load_File('champ_file')">Ajouter un champ de téléchargement</p>
		
		<p><input type = "submit" name = "envoi_file" value = "Envoyez" id = "envoyer" /></p>
		
		</form>
		<div id = "progressbar"></div>
		<div id = "message_tele" class = "info">
				   
					<?php if (isset($messages_form))
					foreach ($messages_form as $num)
							{
									foreach ($num as $value)
									echo '<p>- '.htmlspecialchars($value).'</p>';
							}
					?>
		</div>
	
	</div>
	
</div>

</body>


Le script fait appel en ajax au fichier "upload_progression_ajax.php" dont voici le code :
<?php
header('Content-type: text/html; charset=UTF-8');
session_start();

$ses_p = isset($_POST['session_progress']) ? $_POST['session_progress'] : null;

if(isset($ses_p,$_SESSION[$ses_p],$_SESSION[$ses_p]['done'],$_SESSION[$ses_p]['bytes_processed'],$_SESSION[$ses_p]['content_length'],$_SESSION[$ses_p]['start_time']))
	{
		$start_time = $_SESSION[$ses_p]['start_time']; // heure de début
		
		$content_length = $_SESSION[$ses_p]['content_length']; // Longueur du contenu POST
	
		$bytes_processed = $_SESSION[$ses_p]['bytes_processed'];  // Quantité d'octets reçus et traités
		
		$done = $_SESSION[$ses_p]['done']; // true lorsque le gestionnaire POST a terminé, avec succès ou non
		
		$done = empty($done)? 0 : 1;
		
		$time_now = time();
		
		$time_diff = $time_now - $start_time;
		
		$bytes_diff = $content_length - $bytes_processed;
			
		$vitesse = $bytes_processed/$time_diff;
		
		$prevision_time = $bytes_diff/$vitesse;
		
		$heures = floor($prevision_time/3600);
		$reste = $prevision_time%3600;
		$minutes = floor($reste/60);
		$reste = $reste%60;
		
		$time = array('h'=>$heures,'min'=>$minutes,'s'=>$reste);
		$time = array_filter($time);
		$time = array_map('intval',$time);
		
		$temps_restant = '';
		foreach($time as $key => $value) $temps_restant .= $value.$key.' ';
		
		// Temps nécessaire (ici 6 secondes) avant d'envoyer la valeur du temps restant sinon sur une période trop courte la valeur calculée n'est pas significative.
		$temps_restant = $time_diff < 6 ? 'calcul en cours' : $temps_restant;

		$ratio_bytes = intval(round($bytes_processed/$content_length*100));
		
		$tab_json = array('ratio'=>$ratio_bytes,'temps_restant'=>$temps_restant,'etat'=>$done,'php'=>1);
		
	}
	else // si la condition précédente n'est pas remplie c'est probablement que le post dépasse la valeur maximale autorisée par le serveur ou que la version de php < 5.4 ou que le fichier est déjà téléchargé et la variable de session effacée car nettoyée par session.upload_progress.cleanup.
	{
		$version_php_ok = version_compare(PHP_VERSION, '5.4.0') >= 0 ? 1: 0;
		
		$tab_json = array('ratio'=>0,'temps_restant'=>'nd','etat'=>1,'php'=>$version_php_ok);
	}
	
echo json_encode($tab_json);
?>
Faites des tests sur des fichiers d'au moins 1 méga afin que les informations de téléchargement aient le temps de s'afficher.

Complément pratique : la requête ajax permet par la même occasion de savoir si la directive "post_max_size" est dépassé ou non. Vous n'aurez donc à attendre que quelques secondes avant le reload de la page et l'affichage du message d'avertissement :wink: (alors qu'avant il fallait se taper tout l'upload du post avant de savoir qu'il ne pouvait pas être téléchargé sur le serveur car trop gros).
Par contre en cas de dépassement du "max_file_size" cela reste comme avant (faut attendre) car il serait impossible de choisir depuis php quel fichier doit être interrompu, en effet la variable de session $_SESSION[$key]["cancel_upload"] annule également tous les fichiers en attente.

Attention avec les navigateurs Chrome et Safari : ces navigateurs sont pour l'instant buggués et ne permettent pas de faire des requêtes ajax en même temps qu'un upload. Cela ne bloque pas l'upload mais vous ne verrez donc que le message "Patientez" durant le chargement. Cela dit Chrome possède une fonction intégrée sur la progression de l'upload qui s'affiche à gauche en bas de la page, c'est donc un moindre mal.

Debug :
- Si le message "patientez" ne s'affiche pas c'est que vous n'avez pas installé jquery
- Si (pour un upload de plusieurs secondes) le message "patientez" n'est pas remplacé par un message de progression d'upload c'est que vous n'avez pas php 5.4 mais une version inférieure (ou un navigateur buggué cf paragraphe ci-dessus).
- Si (pour un upload de plusieurs secondes) seul un message de progression d'upload s'affiche en remplacement du message "patientez", mais sans la barre de progression, c'est que vous n'avez pas correctement configuré le chemin des fichiers jquery nécessaires à l'affichage de la barre de progression.


Note : Oui on pourrait aussi attendre que tous les navigateurs supportent correctement les nouvelles fonctionnalités d'upload html5. L'avantage de cette solution est qu' hormis les deux navigateurs buggés cités ci-dessus, l'affichage de la progression fonctionne avec tous les navigateurs mêmes très anciens comme IE 6...