Tom's Guide > Forum > Programmation > [Résolu] Getimagesize, a ne rien comprendre

[Résolu] Getimagesize, a ne rien comprendre

Forum Programmation : [Résolu] Getimagesize, a ne rien comprendre

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !

Lire la meilleure réponse, apportée par SiM07.

Mot :    Pseudo :           
 

Bonjour,

Je viens de terminé un script d'upload de fichier .ico il fonctionne très bien du moins c'est ce que je croyais...

J'ai un petit problème avec une image, tout d'abort voici mon code qui limite la taille des images à 32*32 px

Code :
  1. $width_max = 32;
  2. $height_max = 32;
  3. $infos_img = getimagesize($_FILES['fichier']['tmp_name']);
  4. if(($infos_img[0] > $width_max) && ($infos_img[1] > $height_max)) {
  5. echo "<p style=\"color: red\">".ERREUR_3."</p>";
  6. } else {
  7. ...



J'ai d'abort tester une image de 200px sur 160px qui était à la base en png, j'ai juste changer l'extention... avec cette image j'ai bien le message d'erreur (ERREUR_3) par contre je viens de regarder mon dossier upload et je viens de découvrir une image plus grande que la taille autorisé, elle est bien de type ico mais fais 64 sur 51 px alors que la largeur et la hauteur est limité à 32px, quelqu'un peux m'expliquer?

PS: Quand je fais un echo de $infos_img[0] il ne me ressort aucune mesure...


Message édité par Allstar27 le 25-08-2009 à 14:05:23
------------------------------ Rémunère ton site
Hosting Favicon
Clic pas ici
A toi de choisir la meilleur réponse ;) Par contre quand je demande les résultats d'exécution, à l'avenir donne les entièrement de chez entièrement.

A l'avenir, pense a activer le niveau maximal d'erreur de PHP error_reporting(E_ALL) dans des cas comme ça ça permet de mieux voir les problème. Théoriquement si tu code bien tu ne dois avoir aucun notice.
Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

Peut tu executer et coller le résultat de ceci :

Code :
  1. error_reporting(E_ALL);
  2. $width_max = 32;
  3. $height_max = 32;
  4. echo "<pre>"; print_r($_FILES); echo "</pre>";
  5. $infos_img = getimagesize($_FILES['fichier']['tmp_name']);
  6. echo "<pre>"; print_r($infos_img); echo "</pre>";
  7. if(($infos_img[0] > $width_max) && ($infos_img[1] > $height_max)) {
  8. echo "<p style=\"color: red\">".ERREUR_3."</p>";
  9. } else {



Je vais pas m'avancer avant mais il me semble de mémoire que $_FILE['fichier']['tmp_name'] n'est que le nom du fichier temporaire et non le nom du fichier plus le chemin avant, dans ce cas n'avoir aucun retour serait normal.

Enfin aucun retour, je suis près à parier que $infos_img === false. C'est d'ailleurs un cas que tu pourrais (voir qu'il serait bon de gérer) dans le cas où une personne envois un fichier corrompu volontairement. (on sait jamais)

Répondre à SiM07

En effet $info_img ne me retourne aucune réponse...

L'image n'est pas uploader dans mon dossier, mais il m'affiche le message comme de quoi le fichier est bien uploader...

Je viens également de me rendre compte que $_FILES['fichier']['size'] > $max_size n'entre pas en compte...

Voici l'intégralité du script, parce que là je vois vraiment pas d'ou vient le problème.

Code :
  1. <form method="post" action="index.php?hl=<?php echo $hl; ?>" enctype="multipart/form-data">
  2.     <input type="hidden" name="MAX_FILE_SIZE" value="10240" />
  3.     <table width="100%" cellpadding="0" cellspacing="0">
  4.     <tr>
  5.         <td><input type="file" name="fichier" /></td>
  6.     </tr>
  7.     <tr>
  8.         <td><input type="submit" class="buton" value="<?php echo TXT_UP; ?>" /></td>
  9.     </tr>
  10.     </table>
  11.     </form>



Code :
  1. <?php
  2. require ('lang/choix_hl.php');
  3. include ('lang/lang_'.$hl.'.php');
  4. //----------------------------
  5. // DEFINITION DES VARIABLES
  6. //----------------------------
  7. $target = "upload/";
  8. $extension = "ico";
  9. $max_size = 10240;
  10. $width_max = 32;
  11. $height_max = 32;
  12. //---------------------------------------------
  13. // DEFINITION DES VARIABLES LIEES AU FICHIER
  14. //---------------------------------------------
  15. $time = time();
  16. $nom_file = $_FILES['fichier']['name'];
  17. $tmp = $_FILES['fichier']['tmp_name'];
  18. //----------------------
  19. // SCRIPT D'UPLOAD
  20. //----------------------
  21. if(isset($_FILES['fichier'])) {
  22. if(empty($_FILES['fichier']['name'])) {
  23. echo "<p style=\"color: red\">".ERREUR_1."</p>";
  24. } else {
  25. if(substr($nom_file, -3) != $extension) {
  26. echo "<p style=\"color: red\">".ERREUR_2."</p>";
  27. } else {
  28. $infos_img = getimagesize($_FILES['fichier']['tmp_name']);
  29. if(($infos_img[0] > $width_max) && ($infos_img[1] > $height_max)) {
  30. echo "<p style=\"color: red\">".ERREUR_3."</p>";
  31. } else {
  32. if($_FILES['fichier']['size'] > $max_size) {
  33. echo "<p style=\"color: red\">".ERREUR_4."</p>";
  34. } else {
  35. $req = move_uploaded_file ($_FILES['fichier']['tmp_name'] ,
  36. $target.$time.'_'.$_FILES['fichier']['name']);
  37. echo "<p><span style=\"color: green\">".UP_OK."</span></p>
  38. <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">
  39. <tr>
  40.     <td><p>INFO: ".$info_img[0]."</p></td>
  41. </tr>
  42. <tr>
  43.     <td><p><b>".FILE." :</b> ".$time."_".$_FILES['fichier']['name']."</p></td>
  44. </tr>
  45. <tr>
  46.     <td><p><b>".SIZE." :</b> ".$_FILES['fichier']['size']." Octets</p></td>
  47. </tr>
  48. <tr>
  49.     <td><p><b>".WIDTH." :</b> ".$infos_img[0]."px</p></td>
  50. </tr>
  51. <tr>
  52.     <td><p><b>".HEIGHT." :</b> ".$infos_img[1]."px</p></td>
  53. </tr>
  54. <tr>
  55.     <td><input type=\"text\"
  56. value=\"http://www.monsite.com/upload/".$time."_".$_FILES['fichier']['name']."\"></
  57. td>
  58. </tr>
  59. <tr>
  60.     <td align=\"center\"><img
  61. src=\"http://www.monsite.com/upload/".$time."_".$_FILES['fichier']['name']."\"
  62. /></td>
  63. </tr>
  64. </table>
  65. ";
  66. }}}}
  67. }
  68. ?>



Edit:
$_FILES['fichier']['name'] me donne le nom de l'image + extention
$_FILES['fichier']['size'] me retourne rien
$_FILES['fichier']['error'] me donne 2
$_FILES['fichier']['tmp_name'] me retourne rien

à noté que quand l'image correspont aux critères $img_infos[0] et $img_infos[1] ainsi que $_FILES['fichier']['size'] me retourne le bon résultat!


Message édité par Allstar27 le 25-08-2009 à 22:20:44
------------------------------ Rémunère ton site
Hosting Favicon
Clic pas ici
Répondre à Allstar27

Merci de me donner l'exécution du script que j'ai mis. Sans les informations affichés, le code ne sert à rien, à moins d'être certain du comportement de toutes les fonctions de PHP ...

Perso je prédis un notice en ligne 5 et 2 notices en ligne 7. (bon ok ça c'est logique). C'est surtout le print_r() de $_FILE qui peut être intéressant.

EDIT durant la rédaction.

Bon en fait j'ai trouvé la réponse, c'est plutôt bien quand on regarde à quoi correspondent les messages d'erreur. Lorsque $_FILES['fichier']['error'] donne 2 alors c'est que le fichier dépasse la taille autorisé. Ton fichier de test ne serait pas un peu gros ? à priori trop pour ta configuration de PHP.

Répondre à SiM07

print_r() me retourne:

Code :
  1. Array ( [fichier] => Array ( [name] => background.ico [type] => [tmp_name] => [error] => 2 [size] => 0 ) )



Le truc c'est que j'ai tester avec 4 images différentes et j'ai jamais le même résultat...
Première image: dimension (100 X 100) taille 28,8ko => affiche le message de réussite mas ne s'upload pas aucune dimension ($img_infos) ni ['fichier']['size']
Deuxième image: dimesion (210 X 147) taille 8,41ko => affiche le message d'erreur dimension trop grande
Troisième image: dimension (64 X 51) taille 4,64ko => affiche le message de réussite, s'upload, affiche le poid mais pas les dimensions
Quatrième image: dimension (16 X 16) taille 246 octets => affiche le message de réussite, s'upload, affiche le poid et la dimension...

EDIT: j'ai ajouté:

Code :
  1. if($_FILES['fichier']['error'] > 0) {...


si le fichier est trop volumineux pour le MAX_FILES_SIZE de mon form
et

Code :
  1. if($infos_img[0] == "" ) {...
  2. if($infos_img[1] == "" ) {...


pour l'image qui s'uploadais sans taille... apparement ca à l'air de fonctionné, si tu n'a rien d'autre à ajouté on peut dire que c'est résolu! Merci à toi!


Message édité par Allstar27 le 25-08-2009 à 23:54:53
------------------------------ Rémunère ton site
Hosting Favicon
Clic pas ici
Répondre à Allstar27
Meilleure réponse

A toi de choisir la meilleur réponse ;) Par contre quand je demande les résultats d'exécution, à l'avenir donne les entièrement de chez entièrement.

A l'avenir, pense a activer le niveau maximal d'erreur de PHP error_reporting(E_ALL) dans des cas comme ça ça permet de mieux voir les problème. Théoriquement si tu code bien tu ne dois avoir aucun notice.

Répondre à SiM07
Tom's Guide > Forum > Programmation > [Résolu] Getimagesize, a ne rien comprendre
Aller à :

Il y a 1595 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Liens