Soucis test du poid d'une image en php

Ce topic a été résolu
t0maaah

t0maaah Le 23 mars 2020 à 19:51

Bonjour tout le monde, j'ai suivis avec beaucoup d'assiduité le tuto PHP "Ajouter une photo de profil / avatar" et le principal fonctionne, c'est super. J'ai tout de même un petit problème et j'ai beau cherché, je ne vois pas d'où peut provenir le souci. Donc, à un moment dans le tuto, nous testons si la taille requise de l'image est respecté et si ce n'est pas le cas, nous avons un message d'erreur. Quand je mets une image trop grosse, j'ai bien un message d'erreur, mais pas le bon. Une idée d'où peut provenir le problème ? Merci d'avance pour votre aide.

//Update Avatar
if (isset($_FILES['avatar']) and !empty($_FILES['avatar']['name'])) {
    //Taille maximum de 2mo et extensions valides
    $tailleMax = 2097152;
    $extensionsValides = array('jpg', 'jpeg', 'gif', 'png');
    //Vérification de la taille du fichier envoyé
    if ($_FILES['avatar']['size'] <= $tailleMax) {
        //On récupére l'extension du fichier envoyé
        $extensionsUpload = strtolower(substr(strrchr($_FILES['avatar']['name'], '.'), 1));
        //On vérifie l'extension du fichier envoyé
        if (in_array($extensionsUpload, $extensionsValides)) {
            $chemin = "../user/avatars/" . $_SESSION['id'] . "." . $extensionsUpload;
            $deplacement = move_uploaded_file($_FILES['avatar']['tmp_name'], $chemin);
            if ($deplacement) {
                $newAvatar = $bdd->prepare('UPDATE users SET avatar = :avatar WHERE id = :id');
                $newAvatar->execute(array(
                    'avatar' => $_SESSION['id'] . "." . $extensionsUpload,
                    'id' => $_SESSION['id']
                ));
                header('Location: profil.php?id=' . $_SESSION['id']);
            } else {
                $error = "Erreur lors de l'importation de votre image.";
            }
        } else {
            $error = "Mauvaise extension de fichier ! Veuillez choisir une image qui porte l'une des extensions suivantes : jpg, jpeg, png ou gif.";
        }
    } else {
    $error = "Votre fichier est trop lourd ! Veuillez choisir une image qui fait au moins de 2 Mo.";
    }
}
PrimFX

PrimFX Le 24 mars 2020 à 11:52

Bonjour @t0maaah,

Peux-tu nous indiquer quel est le message d'erreur que tu reçois, si ce n'est pas le bon ?

Il est très probable que la taille du fichier que tu essaies d'uploader excède un de tes paramètres PHP comme upload_max_filesize ou bien post_max_size que tu peux modifier, selon ton environnement, soit :

  • Depuis un fichier php.ini (réglage des constantes/paramètres de PHP)
  • Depuis ton code PHP (avec les fonctions php_ini_set(...))
  • Depuis le fichier .htaccess

Cela expliquerait que la bonne erreur ne s'affiche pas puisuqe ces paramètres PHP interviennent avant le traitement dans ton code PHP.

A+

Meilleure réponse
t0maaah

t0maaah Le 24 mars 2020 à 12:00

Bonjour @PrimFX, merci pour votre retour ! :) Le message d'erreur qu'il me renvoie est "Erreur lors de l'importation de votre image.", donc la seule erreur qui est floue 😅

Je vais tester vos solutions proposées et je reviens vers vous. Encore merci pour votre aide.

PrimFX

PrimFX Le 24 mars 2020 à 12:17

De rien !

Je pense que ton message d'erreur donne en fait une grosse indication puisqu'il vient du else qui survient après ta vérification sur le déplacement du fichier : cela signifie qu'il n'a pas fonctionné ! (Autrement dit, que ton move_uploaded_file(...) a échoué).

Es-tu sûr que ça ne plante qu'avec de grosses images et pas non plus avec des images de petite taille ?

Si le déplacement du fichier échoue, cela peut provenir de plusieurs choses :

  • Permissions manquantes sur le chemin de destination du fichier
  • Chemin de destination du fichier introuvable
  • Etc.

En espérant que ça t'aide à résoudre ton problème !

A+

t0maaah

t0maaah Le 24 mars 2020 à 12:21

C'est tout bon ! Ta première réponse était la bonne solution ! 😄 Merci @PrimFX ! 😃 J'ai modifié le fichier "php.ini" directement depuis WAMP, la limite de "upload_max_filesize" était de 2M. Je lui est mis à lui et à "post_max_size" la valeur 8M. J'ai redémarré les services WAMP, j'ai testé avec différente taille d'image et l'erreur fonctionne parfaitement.

Un grand merci pour ton aide et ta rapidité ! 👌

PrimFX

PrimFX Le 24 mars 2020 à 12:30

Cool ! De rien 😉

Vous devez être connecté pour poster une réponse. Se connecter ou Créer un compte