[résolu]connaitre la taille d'un fichier upload

Eléphant du PHP | 71 Messages

07 déc. 2005, 15:10

Bonjour,

Lorsqu'un fichier dépasse la taille max autorisée, je n'ai pas le message d'ereur.
Je n'ai d'ailleurs rien du tout concernant la taille de mon fichier

Code : Tout sélectionner

if(isset($_FILES['photo'])){ // params unset($erreur); $extensions_ok = array('png', 'gif', 'jpg', 'jpeg','JPG','JPEG','PNG', 'GIF'); $taille_max = 200000; $dest_dossier = '../photo/'; $taille_fic = filesize($_FILES['photo']['tmp_name']); $extension = substr(strrchr($_FILES['photo']['name'], '.'), 1); echo '<br />taille'.$taille_fic; echo '<br />exist'.file_exists($_FILES['photo']['tmp_name']); // vérifications if( !in_array($extension, $extensions_ok ) ) { $erreur = 'Veuillez sélectionner un fichier de type png, gif ou jpg !'; }elseif( (file_exists($_FILES['photo']['tmp_name'])and ($taille_fic > $taille_max))|| $taille_fic==0){ $erreur = 'Votre fichier doit faire moins de 200Ko !'; } // copie du fichier if($erreur==''){ $dest_fichier = basename($_FILES['photo']['name']); // enlever les accents $dest_fichier = strtr($dest_fichier,'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ','AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy'); // remplacer les caracteres autres que lettres, chiffres et point par _ //dest_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier); $dest_fichier = 'bi'.$idBien.'f'.$idphoto; $dest_fichier= $dest_fichier.'.'.$extension; //echo $dest_fichier; move_uploaded_file($_FILES['photo']['tmp_name'], $dest_dossier . $dest_fichier); // insertion dans la base if ($nbphoto==0){ $sql="INSERT INTO photo (`idphoto`,`fkbien` ,`nomfic`,`url` ,`taille`,`favori`) VALUES " ; $sql.=" ('','$idBien','$dest_fichier','$dest_dossier','$taille_fic',1);"; }else{ $sql="INSERT INTO photo (`idphoto`,`fkbien` ,`nomfic`,`url` ,`taille`,`favori`) VALUES " ; $sql.=" ('','$idBien','$dest_fichier','$dest_dossier','$taille_fic',0);"; } $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); }else{ $erreur= '<br /><span id="erreur">'.$erreur.'</span>'; } } }
voici mon formulaire

Code : Tout sélectionner

<form method="POST" action="a_foto.php" enctype="multipart/form-data"> <div id="contenuc"> <input type="hidden" value="40" id="idbien" name="idbien"> <h2>Gestion des photos</h2> <p id="foto"> Vous pouvez ins&eacute;rer 10 photos au maximum.La photo favorie apparaitra dans la liste des biens.<br/> Pour supprimer une photo il faut d'abord choisir une autre photo en tant que favorie.<br/><br/> </p> <ul id="photosave"> <li ><img src="../photo/bi40f4.jpg" alt="photo" /><br /><a href="a_foto.php?idbien=40&etat=supprimer&idphoto=27"><img style="height:15px;width:15px;" src="../image/delete.gif" title="Supprimer cette photo" alt="Effacer"/></a><a href="a_foto.php?idbien=40&etat=coeur&idphoto=27"><img style="height:15px;width:15px;" src="../image/heart.gif" title="Mettre en favoris" alt="Coeur"/></a></li><li ><img src="../photo/bi40f6.jpg" alt="photo" /><br /><a href="a_foto.php?idbien=40&etat=supprimer&idphoto=29"><img style="height:15px;width:15px;" src="../image/delete.gif" title="Supprimer cette photo" alt="Effacer"/></a><a href="a_foto.php?idbien=40&etat=coeur&idphoto=29"><img style="height:15px;width:15px;" src="../image/heart.gif" title="Mettre en favoris" alt="Coeur"/></a></li><li style="border:1px solid #FF0000;"><img src="../photo/bi40f7.jpg" alt="photo" /><br />favori</li><li ><img src="../photo/bi40f8.jpg" alt="photo" /><br /><a href="a_foto.php?idbien=40&etat=supprimer&idphoto=31"><img style="height:15px;width:15px;" src="../image/delete.gif" title="Supprimer cette photo" alt="Effacer"/></a><a href="a_foto.php?idbien=40&etat=coeur&idphoto=31"><img style="height:15px;width:15px;" src="../image/heart.gif" title="Mettre en favoris" alt="Coeur"/></a></li> </ul> <br /> <div id="enregistrerimage"><!-- Limiter la taille des fichiers à 200Ko --><input type="hidden" name="MAX_FILE_SIZE" value="200000" /><fieldset id="photo"><!-- champs d envoi de fichier, de type file --><p><label for="photo">Ajouter une photo&nbsp;</label><input type="file" name="photo" id="photo"/>&nbsp;<!-- bouton d envoi --><input type="submit" class="StandardButton120" name="envoi" value="Enregistrer" /></p></fieldset></div></div> </form>
echo '<br />taille'.$taille_fic;
echo '<br />exist'.file_exists($_FILES['photo']['tmp_name']);

ces deux dernier ne me retourne rien du tout....pourquoi???
Modifié en dernier par nath-0-0 le 08 déc. 2005, 12:03, modifié 1 fois.

ViPHP
ViPHP | 2144 Messages

07 déc. 2005, 15:32

L'upload s'arrête lorsque tu dépasse la taille maximale, donc le fichier n'est pas transmis, et il n'est pas possible d'en récuperer la taille.
La doc devrait te renseigner sur la gestion de ce genre d'erreur.

Eléphant du PHP | 71 Messages

07 déc. 2005, 15:59

j'ai été sur ce tuto
http://www.phpfrance.com/tutoriaux/inde ... e-fichiers

mais apparemment il est pas complet.

Donc si j'ai bien compris c'est le champs caché
<input type="hidden" name="MAX_FILE_SIZE" value="200000" />
qui stoppe l'upload??

Il me semble que c'est pas pris en compte dans le tuto cité ci-deesus.
mais j'ai été voir celui la :
http://www.phpfrance.com/forums/voir_sujet-545.php

qui me semble plus complet au niveau des test :)

Alors je vais voir ce que cela donne...

Merci


pc est ce que qq saurait si il est possible de changer le format de l'image par un traitement php et ainsi le rendre moins volumineux?

ViPHP
ViPHP | 2144 Messages

07 déc. 2005, 16:22

Tu peux fixé une limite dans le code du formulaire, mais tu seras toujours limité par la configuration du serveur.

Mammouth du PHP | 1885 Messages

07 déc. 2005, 17:33

Tu peux fixé une limite dans le code du formulaire, mais tu seras toujours limité par la configuration du serveur.
Bien qu'un utilisateur malveillant peut très bien modifier le formulaire et augmenter la limite de taille de fichier, le champ est principalement utilisé pour avertir l'utilisateur qu'un fichier est trop volumineux avant même son transfert. Cela permet d'éviter à l'utilisateur d'attendre le transfert du fichier pour finalement se voir interdire l'upload pour cause de fichier trop volumineux.

Donc il est préférable de contre vérifier la taille du fichier uploader afin de s'assurer que la limite a bien été appliquée.
La programmation est l'expression de la poésie d'un programmeur
Génération PHP

Invité
Invité n'ayant pas de compte PHPfrance

08 déc. 2005, 11:58

merci bcp pour vos réponses!!!!