[php] Upload de fichier et test de taille

Upload de fichier et test de taille [php] - PHP - Programmation

Marsh Posté le 01-12-2002 à 01:02:40    

Slt !
Voila g un pb qui m'agace depuis un moment.
G un formu remplit par l'utilisateur ou il y a notamment un espace pour un fichier.
Il choisit le fichier envoie le formu, jusque là tout va bien.
 
Ensuite ya un test du type :

Code :
  1. if ($fupload_size<"15000" )
  2. {
  3. ... blabla ...
  4. copy($fupload, $file_dir."/".$id.".gif" ) or die("Impossible de copier" );
  5. ... blabla ...
  6. }
  7. else
  8. echo "trop grand";


 
Et le probleme est le suivant : il upload TOUJOURS le fichier (dans un truc temporaire ou je ne sais ou) avant d'avoir la taille et donc de faire le test.
 
Y'a moyen d'eviter ca ?
parceque quand je met une grande image je me mange un  
 
"La page n'a pu etre affichée" Suite au timeout ... merci d'avance !


---------------
Gamertag : Getget94 - PSN : Getget1980 - Nintendo Network : Getget1980 - Uplau : Getget1980
Reply

Marsh Posté le 01-12-2002 à 01:02:40   

Reply

Marsh Posté le 01-12-2002 à 01:34:53    

tas mis ca ds ton formulaire ?
 
<INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="1024000">

Reply

Marsh Posté le 01-12-2002 à 01:52:32    

Vi g meme mit <INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="10"> pour etre sur !
Mais ca change rien :/
 
J'upload plusieurs fichiers ca change kke chose ?


---------------
Gamertag : Getget94 - PSN : Getget1980 - Nintendo Network : Getget1980 - Uplau : Getget1980
Reply

Marsh Posté le 01-12-2002 à 02:08:41    

on va un seul post ... c'est quand l'utilité du max_file_size.
jai vu un truc tt a lheure, je reviens.
 
edit : http://www.devparadise.com/technoweb/code/PHP/A435.asp
regarde si ca peut taider
 
 
chez moi limite a 100 ko :
un fichier de taille < = ok
un fichier de taille > = ca rame .. et au bout dun moment, le post s'effectue, je nai pas le fichier attaché.
 
chez moi limite a 10 ko :
un fichier de taille > = aussitot, cest posté sans le fichier


Message édité par beleg le 01-12-2002 à 02:20:13
Reply

Marsh Posté le 01-12-2002 à 10:18:07    

Chez moi si je met a 10000 donc 10ko ca rame si je mets un plus gros, il le met en cache quand meme :/


Message édité par getget le 01-12-2002 à 10:50:46

---------------
Gamertag : Getget94 - PSN : Getget1980 - Nintendo Network : Getget1980 - Uplau : Getget1980
Reply

Marsh Posté le 01-12-2002 à 14:40:57    

Bin c'est normal. PHP s'exécute côté serveur, donc comment tu veux que le serveur aille déterminer la taille d'un fichier qui est chez le client ? Y a pas de magie ni de mystère, si le client n'uploade pas le fichier sur le serveur, PHP ne peut rien faire.

Reply

Marsh Posté le 01-12-2002 à 15:07:06    

on parle de max_file_size, qui est défini par le HTML, rien a voir avec le php.
 
Point capital nécessaire pour l'envoi d'un fichier en pièce jointe : il faut changer la valeur de l'attribut ENCTYPE du conteneur FORM en multipart/form-data. En effet, ENCTYPE précise au navigateur le type MIME du message envoyé lors de la validation du formulaire. Le type MIME plain/text vu plus haut signifie texte brut, alors que multipart/form-data signifie que le message peut contenir des données binaires. Si vous oubliez de spécifier le bon code MIME pour l'envoi d'un fichier, vous ne recevrez qu'une chaîne de caractères contenant le nom et le chemin de ce fichier dans l'ordinateur de l'internaute !  
 
Il est également possible de limiter la taille du fichier à envoyer afin de limiter l'encombrement de votre boite aux lettres. Pour cela, ajouter un champs caché nommé MAX_FILE_SIZE et de valeur la taille maximal acceptée en octets.  
 
pas de php ici :
 

Code :
  1. <FORM NAME="nom_du_formulaire" ACTION="mailto:votre@email" METHOD="post" ENCTYPE="multipart/form-data">
  2. <INPUT TYPE="hidden" NAME="MAX_FILE_SIZE" VALUE="taille">
  3. <INPUT TYPE="file" NAME="nom_du_champ" SIZE="taille">
  4. </FORM>

Reply

Marsh Posté le 01-12-2002 à 16:22:29    

J'ai le multipart form/data, j'ai le max_file_size .... mais ca ne marche pas ...


---------------
Gamertag : Getget94 - PSN : Getget1980 - Nintendo Network : Getget1980 - Uplau : Getget1980
Reply

Marsh Posté le 01-12-2002 à 22:50:41    

http://www.quiappeler.com/Test
Regardes ici tu as acces aux sources du truc ...
 
Le HTML :
 

Code :
  1. <html>
  2. <head>
  3. <title>Document sans titre</title>
  4. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  5. </head>
  6. <body>
  7. <form name="form1" enctype="multipart/form-data" method="post" action="upload.php">
  8.   <p>
  9.     <INPUT TYPE="hidden" NAME="MAX_FILE_SIZE" VALUE="10">
  10.     <input type="file" name="file">
  11.   </p>
  12.   <p>
  13.     <input type="submit" name="Submit" value="Envoyer">
  14.   </p>
  15. </form>
  16. </body>
  17. </html>


 
 
Et upload.php :
 

Code :
  1. <html>
  2. <head>
  3. <title>Document sans titre</title>
  4. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  5. </head>
  6. <body>
  7. <?
  8. if ($file_size<"10" )
  9.   { 
  10.    
  11.     copy($file, "Test/test.gif" ) or die("Impossible de copier" );
  12. echo "copié";
  13. }
  14. else
  15. echo "pas copié"
  16. ?>
  17. </body>
  18. </html>


---------------
Gamertag : Getget94 - PSN : Getget1980 - Nintendo Network : Getget1980 - Uplau : Getget1980
Reply

Marsh Posté le 01-12-2002 à 23:10:40    

Mais Lizez La Doc Bordel !
 
C'est écrit dans la couleur que vous voulez !
 
http://www.php.net/manual/en/features.file-upload.php
 
[citation]
The MAX_FILE_SIZE is advisory to the browser. It is easy to circumvent this maximum. So don't count on it that the browser obeys your wish! The PHP-settings for maximum-size, however, cannot be fooled.
[/citation]
 
Les seuls param PHP qui peut réellement limiter la taille du fichier, c'est upload_max_filesize et post_max_size dans php.ini
 
Il faut savoir que l'upload d'un fichier est traité par le seveur AVANT l'execution du script PHP sensé le traité.
 
N'importe qui peux créer un formulaire HTML qui envoie un fichier de 2 Mo (valeur par défaut de upload_max_filesize ) sur un serveur PHP quelconque. Le fait est que le fichier reçu est dans un fichier temporaire sur le serveur et que PHP supprime le fichier temporaire à la fin du script sensé le traiter.
 
Le problème n'est donc pas de se retrouver avec plein de fichiers temporaires, mais c'est une faille pour une attaque DOS. Ca bouffe la bande passante du serveur pour rien.


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 01-12-2002 à 23:10:40   

Reply

Marsh Posté le 01-12-2002 à 23:38:29    

Oué mais moi g pas accez au php.ini donc je cherche une autre solution ....
Car g un timeout avant que le fichoier ne soit uploadé


---------------
Gamertag : Getget94 - PSN : Getget1980 - Nintendo Network : Getget1980 - Uplau : Getget1980
Reply

Marsh Posté le 02-12-2002 à 00:28:23    

tenerves pas, php est une chose, html en est une autre, la cest un probleme de html donc laisse php de coté, evidemment quil traite la taille, mais getget veut la traiter coté client egalement.

Reply

Marsh Posté le 02-12-2002 à 00:33:09    

Bien a priori avec php4 il faut mettre  
 
 <INPUT TYPE="hidden" NAME="UPLOAD_MAX_FILESIZE" VALUE="200000" >
 
et la ca marche mais il me reste un pb .... g un timeout avant la fin de l'upload....


---------------
Gamertag : Getget94 - PSN : Getget1980 - Nintendo Network : Getget1980 - Uplau : Getget1980
Reply

Marsh Posté le 02-12-2002 à 00:42:33    

je mettrais ca :
 
if (($file_size<10)&&($file_size>0))
 
ca peut pas faire de mal.

Reply

Marsh Posté le 02-12-2002 à 00:52:29    

Vouivoui enfin la g pa smit tout le script non plus :)


---------------
Gamertag : Getget94 - PSN : Getget1980 - Nintendo Network : Getget1980 - Uplau : Getget1980
Reply

Marsh Posté le 02-12-2002 à 01:24:05    

mouais ... tu crois que je vais te croire  :lol: .
 
rajoute le, chez moi, avec tes fichiers :
 
sans : upload de 1mo ... ca rame 25 secondes, puis erreur car il tente de copier un fichier qui na pas ete uploadé
 
avec : upload 1 mo ... ca rame 25 secondes, et ca le copie pas car taille = 0.
 
pendant tt ces tests, juplodais 1mo sur ton serveur, ca a duré tres lontemps ... tres tres longtemps ... le probleme ne vient peut etre pas de html ou php mais du serveur sur lequel sont les fichiers.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed