Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/12/2006, 22h10   #1
Nouveau Membre du Club
 
Avatar de Artusamak
 
Inscription : mai 2006
Messages : 76
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 76
Points : 30
Points : 30
Par défaut Fichier trop gros = réinitialisation

Bonjour à tous, j'ai un petit soucis au niveau de mon script d'upload de fichier, dès que j'envoie un fichier supérieur à la limite fixée dans mon script (ou par php.ini), le script se mets à déconner.

Explication de déconner : lorsque la taille du fichier est supérieure à celle autorisée, le serveur recharge la page comme si de rien était

Détails :

Un formulaire avec deux champs :

- Le nom de l'oeuvre
- La photo de l'oeuvre (qui va être uploadée)

Taille limite d'un fichier : 5 Mo

Lorsque j'up un fichier inférieur à 5 Mo tout se passe bien, dès que j'up un fichier supérieur à 5 Mo, j'ai l'impression que le script tente d'envoyer le fichier (léger délai) puis recharge la page sans faire de traitement :/

Voilà un peu de code

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
        if(isset($_POST['titre_oeuvre']))
        {
                if(!empty($_POST['titre_oeuvre']))
                {
                        if(isset($_FILES['photo_oeuvre']))
                        {                            
                                $num_erreur = $_FILES['photo_oeuvre']['error'];
 
                                switch($num_erreur)
                                {
                                        case UPLOAD_ERR_INI_SIZE: // Trop gros (limite php.ini)
                                                message_erreur(NO_UPLOAD_MAX_INI_SIZE,$_SERVER['PHP_SELF'],"Réenvoyer le fichier");
                                                break;
                                        case UPLOAD_ERR_FORM_SIZE: // Trop gros (limite formulaire)
                                                message_erreur(NO_UPLOAD_MAX_FORM_SIZE,$_SERVER['PHP_SELF'],"Réenvoyer le fichier");
                                                break;
                                        case UPLOAD_ERR_PARTIAL: // Envoi incomplet
                                                message_erreur(NO_UPLOAD_PARTIAL_SEND,$_SERVER['PHP_SELF'],"Réenvoyer le fichier");
                                                break;
                                        case UPLOAD_ERR_NO_FILE: // Rien d'envoyé
                                                message_erreur(NO_UPLOAD_NO_FILE,$_SERVER['PHP_SELF'],"Réenvoyer le fichier");
                                                break;
                                        default:
                                                $connexion = mysql_connect($server_db,$login_db,$password_db);
                                                mysql_select_db($database,$connexion);
 
                                                if($_FILES['photo_oeuvre']['size'] <= $taille_max_fichier)
                                                        echo "ok";
                                                else
                                                        echo "trop gros";
                                                exit();// Ajout dans la base de données
 
                                                mysql_close($connexion);
 
                                                break;
                                }
                        }
                        else
                                message_erreur(NO_WORK_PICTURE,RACINE.'gest/ajout_oeuvre.php','Corriger le problème');
                }
                else
                        message_erreur(NO_WORK_TITLE,RACINE.'gest/ajout_oeuvre.php','Corriger le problème');
        }

Merci à vous si vous avez des idées.
Artusamak est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2006, 07h24   #2
Inscrit
 
Avatar de is_null
 
Inscription : octobre 2006
Messages : 637
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 637
Points : 690
Points : 690
PHP ne peut empecher le client d'envoyer un fichier supérieur à la taille maximale autorisé, bien que le MAX_FILE_SIZE soit un sujet parfait pour troller, dans votre cas je propose de faire un test avant de commencer le traitement des données reçues avec http://fr3.php.net/filesize

En effet, comme expliqué dans le manuel à la section d'upload de fichiers http://fr.php.net/features.file-upload, lorsque le script termine sont execution alors qu'un fichier uploadé est plus lourd que permis, il disparait du répertoire temporaire, en revanche, il faut effectivement bien prévoir le cas grace à filesize
__________________
Q: Dois-je haïr et cogner sur Microsoft ?
R: Non, vous n'êtes pas obligé. Non pas que Microsoft n'est pas écoeurant, mais il y avait une culture hacker bien avant Microsoft et il y en aura une bien après que Microsoft aura été de l'histoire ancienne. Toute énergie dépensée à haïr Microsoft serait mieux employée par vos compétences et votre passion. Écrivez du bon code, cela brisera suffisamment Microsoft sans polluer votre karma.
Comment devenir un hacker ? par Eric Steven Raymond
is_null est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2006, 21h10   #3
Nouveau Membre du Club
 
Avatar de Artusamak
 
Inscription : mai 2006
Messages : 76
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 76
Points : 30
Points : 30
Comment accéder au chemin du fichier qui va être uploadé ? On peut accéder au nom du fichier, pas de problème mais pour utiliser filesize() il faut le chemin + le nom du fichier. Et là on a pas le chemin du fichier

J'avais déjà fait un script d'upload et je n'avais pas ce soucis là, c'est ce qui m'étonne.

J'ai matté tes liens, j'étais déjà allé les voir, ça ne change rien
Artusamak est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2006, 00h26   #4
Membre confirmé
 
Inscription : décembre 2006
Messages : 297
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 297
Points : 248
Points : 248
Citation:
Explication de déconner : lorsque la taille du fichier est supérieure à celle autorisée, le serveur recharge la page comme si de rien était
c'est tout à fait normale, car la taille du fichier envoyé est trop grosse, donc automatiquement l'exécution de ton script PHP est coupé.

is_null a tout à fait raison de dire que MAX_FILE_SIZE est un sujet de trollage, tout simplement parce qu'il est inutile.
Il est facilement modifiable, donc MAX_FILE_SIZE est alors totalement perverti (donc inutilisable).
juJuv51 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2006, 06h57   #5
Nouveau Membre du Club
 
Avatar de Artusamak
 
Inscription : mai 2006
Messages : 76
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 76
Points : 30
Points : 30
En Gros il n'y a aps de solutions ?
Artusamak est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2006, 11h09   #6
Membre confirmé
 
Inscription : décembre 2006
Messages : 297
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 297
Points : 248
Points : 248
bah, c'est pas vraiment une erreur, étant donner que c'est normale

c'est une mesure de sécurité, qui fait que le serveur ne prendre pas (et n'est pas surcharger de manière continue) des requêtes d'une certaine taille
si tu veux une solution, tu dois augmenter la taille des requêtes que le serveur peut prendre...
juJuv51 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2006, 11h22   #7
Membre actif
 
Inscription : juillet 2003
Messages : 257
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 257
Points : 162
Points : 162
Citation:
Envoyé par Artusamak
Comment accéder au chemin du fichier qui va être uploadé ? On peut accéder au nom du fichier, pas de problème mais pour utiliser filesize() il faut le chemin + le nom du fichier. Et là on a pas le chemin du fichier
tu peux faire un
Code :
filesize($_FILES['userfile']['tmp_name'])
EDIT: en fait, quand tu essaye d'uploader un fichier trop gros, et ton script revient à la page initiale, t'as pas la notion 'Corriger le problème'?
SegmentationFault est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2006, 19h20   #8
Nouveau Membre du Club
 
Avatar de Artusamak
 
Inscription : mai 2006
Messages : 76
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 76
Points : 30
Points : 30
Citation:
Envoyé par SegmentationFault
tu peux faire un
Code :
filesize($_FILES['userfile']['tmp_name'])
EDIT: en fait, quand tu essaye d'uploader un fichier trop gros, et ton script revient à la page initiale, t'as pas la notion 'Corriger le problème'?

Je n'ai pas compris ton edit...

L'idée c'était de tester la taille du fichier à up avant de l'envoyer pour éviter de faire le traitement pour rien mais en gros c'est pas possible, le filesize sera toujours fait par rapport au fichier uploader.

Je ferai avec, merci les gens.
Artusamak est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2006, 21h17   #9
Membre confirmé
 
Inscription : décembre 2006
Messages : 297
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 297
Points : 248
Points : 248
Tu peux contrôler la taille du fichier avant l'upload, mais pour ça il faut que tu utilises autre chose que PHP (Flash ou Perl par exemple)
car PHP ne s'exécute quand une fois, et qu'une fois qu'il a tout reçu.

Il n'y a pas de problème là en réalité, étant donné que c'est normale (le serveur est paramétré pour avoir cette réaction, il stop l'exécution du script.)
juJuv51 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2006, 21h53   #10
Nouveau Membre du Club
 
Avatar de Artusamak
 
Inscription : mai 2006
Messages : 76
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 76
Points : 30
Points : 30
J'ai bien compris. Merci à vous deux
Artusamak est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2006, 21h58   #11
Membre confirmé
 
Inscription : décembre 2006
Messages : 297
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 297
Points : 248
Points : 248
Il te reste plus qu'à te mettre à d'autre langage ;p

Tu peux facilement trouver des scripts PHP/CGI pour l'upload de fichier avec des barre de progression qui empêche au tout début l'upload de fichier que le serveur ne peut pas prendre
juJuv51 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2006, 22h25   #12
Nouveau Membre du Club
 
Avatar de Artusamak
 
Inscription : mai 2006
Messages : 76
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 76
Points : 30
Points : 30
Lol ouai ^^

Reste plus que ça à faire
Artusamak est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h47.


 
 
 
 
Partenaires

Hébergement Web