8797 sujets

Développement web côté serveur, CMS

Bonjour,

J'ai créé un formulaire pour permettre l'upload d'image.

Et pour éviter l'usage abusif de la bande passante par le téléchargement temporaire (principe de l'upload avant la fonction move_uploaded_file), j'ai paramétré les options suivantes (limite d'upload de 20Ko pour l'exemple) :

upload_max_filesize = 20K
au passage l'option post_max_size est limité à 8M

Le dépassement de la taille du fichier est très bien détecté pour des fichiers de l'ordre de quelques Mo mais pour ce qui est des fichiers de quelques Go, le dépassement n'est plus détecté... Smiley biggol

Ai-je manqué quelques paramètres ?

Merci pour vos lumières et votre indulgence.

[/b][b]
Modifié par yannneo (16 Sep 2010 - 15:54)
Salut,

déjà 20 ko ça fait léger pour une image non ?

Ensuite je ne sais pas très bien ce que tu veux dire par "le dépassement n'est plus détecté" : si tu ne testes que $_FILES['fichier']['error'] c'est normal puisque si la limite de post_max_size est dépassé $_FILES est vide. Il faut donc faire quelque chose comme :
if( $_SERVER['REQUEST_METHOD']=='POST' ) {
	// Fichier trop volumineux
	if( empty($_FILES) ) {
		$erreurs[] = 'Le fichier ne doit pas dépasser '.ini_get('post_max_size').' !';
	} elseif( $_FILES['fichier']['error']!= 0 ) {
		$erreurs[] = 'Une erreur est survenue.'; // cf.  http://fr.php.net/manual/fr/features.file-upload.errors.php
 
	} else {
		// Aucune erreur d'upload : on traite le fichier (taille maxi, etc...)
	}
}
Salut Heyoan,

20Ko pour des avatars cela devrait être suffisant Smiley cligne

Effectivement si le total des données POST est supérieur à la limite post_max_size alors rien n'est transmis au serveur : les tableaux $_POST et $_FILES sont vides...
Cependant, je souhaitais éviter l'usage abusif de la bande passante (imagine que la personne upload un fichier de 2Go et que tu dois attendre la fin du téléchargement temporaire...) donc je pensais que l'option upload_max_filesize du fichier php.ini permattait de stopper l'upload en cas de dépassement.
Me trompe-je ?

Merci pour ton aide !
Modifié par yannneo (16 Sep 2010 - 13:19)
yannneo a écrit :
Me trompe-je ?
Oui : ça va juste générer une error = 1 mais seulement côté php et le client ne va rien stopper avant.
En principe on avait inventé l'INPUT hidden MAX_FILE_SIZE pour justement ne pas attendre la fin de l'upload pour se rendre compte que la taille était dépassée mais dans les faits ça n'est implémenté par aucun navigateur à ma connaissance et ça ne fait que générer, toujours côté PHP, une error = 2.
OK merci pour ces précisions.
Je confirme tes dires à propos de l'INPUT hidden MAX_FILE_SIZE.
Par contre j'ai lu qu'avec du flash, on pouvait vérifier la taille du fichier avant envoi (ce que Javascript ne permet pas...).
Qu'en penses-tu ?
Sinon aurais-tu une solution à ma problématique d'upload ?

Merci !
yannneo a écrit :
Par contre j'ai lu qu'avec du flash, on pouvait vérifier la taille du fichier avant envoi (ce que Javascript ne permet pas...).
Qu'en penses-tu ?
Que j'ai lu la même chose ! Smiley lol
skywalk3r et Tymlis suggèrent des scripts dans ce sujet.

yannneo a écrit :
Sinon aurais-tu une solution à ma problématique d'upload ?
Eh bien d'utiliser Flash ou même de ne rien faire et de laisser les plaisantins uploader des fichiers de plusieurs mégas / gigas alors que tu leur as spécifié de ne pas dépasser 20 ko.
alors là ... merci du tuyau !

J'avais le même pb et je confirme que lorsqu'on uploade en PHP, si le fichier envoyé dépasse en poids la valeur du ini_get('post_max_size'), aucune variable ne passe.
Autrement dit les tableaux $_FILES et $_POST sont vides de chez vide à l'arrivée...
c'est désespérant Smiley sweatdrop mais en mettant une petit booléen de contrôle (if( empty($_FILES) etc...) on peut contourner le problème en prévenant le visiteur qui a la main lourde Smiley cligne !

merci merci merci