PHP

Erreur: Image cannot be displayed

Résolu

Bonjour,

J'ai suivi le tutoriel pour les avatars, lorsque j'essaie d'upload un avatar, il me sort une erreur:

L’image « https://www.didoub74.fr/monprofil » ne peut être affichée car elle contient des erreurs.

Voici la partie de mon code qui pose problème :

if ($extensionUpload == 'jpg' || $extensionUpload == 'jpeg' || $extensionUpload == "pjpg" || $extensionUpload == 'pjpeg')
{ // Content type
    header('Content-Type: image/jpeg');
    // Important !!
    $exif = exif_read_data($filename);
    if (!empty($exif['Orientation']))
    {
        switch ($exif['Orientation'])
        {
            case 8:
                $image_p2 = imagerotate($image_p2, 90, 0);
            break;
            case 3:
                $image_p2 = imagerotate($image_p2, 180, 0);
            break;
            case 6:
                $image_p2 = imagerotate($image_p2, -90, 0);
            break;
        }
    } // Affichage    
    imagejpeg($image_p2, "public/avatars/" . $_SESSION['id'] . "/" . $nom . "." . $extensionUpload, 75);    imagedestroy($image_p2);}
    


Si vous avez besoin du code complet dîtes moi et je vous le donnerais


Cordialement Maximilien

P.S. Un topic précédent à été créer, c'est mon ancien compte que j'ai supprimé et recréer pour un souci.

1114 vues
04 novembre 2021 à 18:45 (Édité)
Cette pub permet au site de vivre ...
Compte-supprimé
Le 09 Novembre 2021 à 17:28 (Édité)

Je pense avoir trouver le problème, le problème semble venir de la librarie "exif" qui ne semble pas activé, plus que à attendre l'approbation de l'administrateur système pour confirmer mon hypothèse ;)


P.S. Ce serait bien d'indiquer que la librarie GD est requise ;)

Cette pub permet au site de vivre ...

21 commentaires

Re @Didoub74,


Il faudrait afficher les erreurs...

Essaye de supprimer cette ligne temporairement afin que les erreurs du code soient affichées :


error_reporting(E_ERROR | E_WARNING | E_PARSE);
ini_set("display_errors", 1);


Après modification, qu'est-ce que cela t'affiche ? 🤔

Tenez mon code:

<?php
	session_start();
	error_reporting(E_ERROR | E_WARNING | E_PARSE);
	ini_set("display_errors", 1);
	require('class/connexionDB.php');
	

	if (!isset($_SESSION['id'])){
	    header('Location: index.php');
	    exit;
	}
	

	// On récupère les informations de l'utilisateur connecté
	$afficher_profil = $db->query("SELECT *
	FROM utilisateur
	WHERE id = ?",
	    array($_SESSION['id']));
	$afficher_profil = $afficher_profil->fetch();
	

	if(!empty($_POST)) {
	    extract($_POST);
	    $valid = true;
	

	    if (isset($_POST['submit'])) {
	        $nom = htmlentities(trim($nom));
	        $prenom = htmlentities(trim($prenom));
	        $mail = htmlentities(strtolower(trim($mail)));
	

	        if (empty($pseudo)) {
	            $valid = false;
	            $er_pse = "Il faut mettre un pseudo";
	        }
	

	        if (empty($email)) {
	            $valid = false;
	            $er_mail = "Il faut mettre un mail";
	

	        } elseif (!preg_match("/^[a-z0-9\-_.]+@[a-z]+\.[a-z]{2,3}$/i", $email)) {
	            $valid = false;
	            $er_mail = "Le mail n'est pas valide";
	

	        } else {
	            $req_mail = $db->query("SELECT mail 
	                    FROM utilisateur 
	                    WHERE mail = ?",
	                array($mail));
	            $req_mail = $req_mail->fetch();
	

	            if ($req_mail['mail'] <> "" && $_SESSION['mail'] != $req_mail['mail']) {
	                $valid = false;
	                $er_mail = "Ce mail existe déjà";
	            }
	        }
	        #--- AVATAR ---
	        if (!empty($_FILES['file']['name'])) { // On vérifie qu'il y a bien un fichier
	            $filename = $_FILES['file']['tmp_name']; // On récupère le nom du fichier
	            list($width_orig, $height_orig) = getimagesize($filename); // On récupère la taille de notre fichier (l'image)
	

	            if ($width_orig >= 500 && $height_orig >= 500 && $width_orig <= 6000 && $height_orig <= 6000) { // On vérifie que la taille de l'image et correcte
	

	                $ListeExtension = array('jpg' => 'image/jpeg', 'jpeg' => 'image/jpeg', 'png' => 'image/png', 'gif' => 'image/gif');
	                $ListeExtensionIE = array('jpg' => 'image/pjpg', 'jpeg' => 'image/pjpeg');
	                $tailleMax = 5242880; // Taille maximum 5 Mo
	                // 2mo  = 2097152
	                // 3mo  = 3145728
	                // 4mo  = 4194304
	                // 5mo  = 5242880
	                // 7mo  = 7340032
	                // 10mo = 10485760
	                // 12mo = 12582912
	                $extensionsValides = array('jpg', 'jpeg'); // Format accepté
	

	                if ($_FILES['file']['size'] <= $tailleMax) { // Si le fichier et bien de taille inférieur ou égal à 5 Mo
	

	                    $extensionUpload = strtolower(substr(strrchr($_FILES['file']['name'], '.'), 1)); // Prend l'extension après le point, soit "jpg, jpeg ou png"
	

	                    if (in_array($extensionUpload, $extensionsValides)) { // Vérifie que l'extension est correct
	

	                        $dossier = "public/avatars/" . $_SESSION['id'] . "/"; // On se place dans le dossier de la personne
	

	                        if (!is_dir($dossier)) { // Si le nom de dossier n'existe pas alors on le crée
	                            mkdir($dossier);
	                        } else {
	                            if (file_exists( __DIR__ . "/public/avatars/" . $_SESSION['id'] . "/" . $_SESSION['avatar']) && isset($_SESSION['avatar'])) {
	                                unlink( __DIR__ . "/public/avatars/" . $_SESSION['id'] . "/" . $_SESSION['avatar']);
	                            }
	                        }
	

	                        $nom = md5(uniqid(rand(), true)); // Permet de générer un nom unique à la photo
	                        $chemin = __DIR__ . "/public/avatars/" . $_SESSION['id'] . "/" . $nom . "." . $extensionUpload; // Chemin pour placer la photo
	                        $resultat = move_uploaded_file($_FILES['file']['tmp_name'], $chemin); // On fini par mettre la photo dans le dossier
	

	                        if ($resultat) { // Si on a le résultat alors on va comprésser l'image
	

	                            if (is_readable( __DIR__ . "/public/avatars/" . $_SESSION['id'] . "/" . $nom . "." . $extensionUpload)) {
	                                $verif_ext = getimagesize( __DIR__ . "/public/avatars/" . $_SESSION['id'] . "/" . $nom . "." . $extensionUpload);
	

	                                // Vérification des extensions avec la liste des extensions autorisés
	                                if ($verif_ext['mime'] == $ListeExtension[$extensionUpload] || $verif_ext['mime'] == $ListeExtensionIE[$extensionUpload]) {
	                                    // J'enregistre le chemin de l'image dans filename
	                                    $filename =  __DIR__ . "/public/avatars/" . $_SESSION['id'] . "/" . $nom . "." . $extensionUpload;
	

	                                    // Vérification des extensions que je souhaite prendre
	                                    if ($extensionUpload == 'jpg' || $extensionUpload == 'jpeg' || $extensionUpload == "pjpg" || $extensionUpload == 'pjpeg') {
	                                        $image2 = imagecreatefromjpeg($filename);
	                                    }
	

	                                    // Définition de la largeur et de la hauteur maximale
	                                    $width2 = 720;
	                                    $height2 = 720;
	

	                                    list($width_orig, $height_orig) = getimagesize($filename);
	

	                                    // Redimensionnement
	                                    $image_p2 = imagecreatetruecolor($width2, $height2);
	                                    imagealphablending($image_p2, false);
	                                    imagesavealpha($image_p2, true);
	

	                                    // Cacul des nouvelles dimensions
	                                    $point2 = 0;
	                                    $ratio = null;
	                                    if ($width_orig <= $height_orig) {
	                                        $ratio = $width2 / $width_orig;
	                                    } else if ($width_orig > $height_orig) {
	                                        $ratio = $height2 / $height_orig;
	                                    }
	

	                                    $width2 = ($width_orig * $ratio) + 1;
	                                    $height2 = ($height_orig * $ratio) + 1;
	

	                                    imagecopyresampled($image_p2, $image2, 0, 0, $point2, 0, $width2, $height2, $width_orig, $height_orig);
	                                    imagedestroy($image2);
	

	                                    if ($extensionUpload == 'jpg' || $extensionUpload == 'jpeg' || $extensionUpload == "pjpg" || $extensionUpload == 'pjpeg') {
	

	                                        // Content type
	                                        header('Content-Type: image/jpeg'); // Important !!
	

	                                        $exif = exif_read_data($filename);
	                                        if (!empty($exif['Orientation'])) {
	                                            switch ($exif['Orientation']) {
	                                                case 8:
	                                                    $image_p2 = imagerotate($image_p2, 90, 0);
	                                                    break;
	                                                case 3:
	                                                    $image_p2 = imagerotate($image_p2, 180, 0);
	

	                                                    break;
	                                                case 6:
	                                                    $image_p2 = imagerotate($image_p2, -90, 0);
	

	                                                    break;
	                                            }
	                                        }
	                                        // Affichage
	                                        imagejpeg($image_p2, "public/avatars/" . $_SESSION['id'] . "/" . $nom . "." . $extensionUpload, 75);
	                                        imagedestroy($image_p2);
	                                    }
	

	                                    $DB->insert("UPDATE utilisateur SET avatar = ? WHERE  id = ?",
	                                        array(($nom . "." . $extensionUpload), $_SESSION['id']));
	

	                                    $_SESSION['avatar'] = ($nom . "." . $extensionUpload); // On met à jour l'avatar
	

	                                    $info_avatar = "Nouvel avatar enregistré !";
	                                    header('Location: profil'); // Pour la redirection
	                                    exit;
	                                } else {
	                                    $er_avatar = "Le type MIME de l'image n'est pas bon";
	                                }
	                            }
	                        } else
	                            $er_avatar = "Erreur lors de l'importation de votre photo.";
	

	                    } else
	                        $er_avatar = "Votre photo doit être au format jpg.";
	

	                } else
	                    $er_avatar = "Votre photo de profil ne doit pas dépasser 5 Mo !";
	            } else
	                $er_avatar = "Dimension de l'image minimum 400 x 400 et maximum 6000 x 6000 !";
	        } else
	            $er_avatar = "Veuillez mettre une image";
	

	        if ($valid) {
	

	            $db->insert("UPDATE utilisateur SET pseudo = ?, mail = ? 
	                    WHERE id = ?",
	                array($pseudo, $email, $_SESSION['id']));
	

	            $_SESSION['pseudo'] = $pseudo;
	            $_SESSION['mail'] = $mail;
	

	            //header('Location:  monprofil.php');
	            //exit;
	        }
	    }
	}
	?>
	<!DOCTYPE html>
	<html lang="fr">
	<head>
	    <meta charset="UTF-8">
	    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
	    <link rel="stylesheet" href="css/now-ui-kit.css">
	    <link rel="stylesheet" href="css/bootstrap.min.css">
	    <link rel="stylesheet" href="css/main.css">
	

	    <link href="https://fonts.googleapis.com/css?family=Poppins:300,400,600,700,800,900&display=swap" rel="stylesheet">
	    <link href="https://fonts.googleapis.com/css?family=Montserrat:400,600,700,800,900&display=swap" rel="stylesheet">
	    <link href="https://fonts.googleapis.com/css?family=Lato:300,400,600,700,800,900&display=swap" rel="stylesheet">
	    <title>CrosStorm | Mon profil</title>
	    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
	</head>
	<body>
	<?php require "menu.php"; ?>
	<div class="heading">
	    <h1 style="text-align: center" class="display-5 title">Modifier son profil</h1>
	    <!--<a class="btn btn-secondary btn-lg" href="#server_link" target="_blank" role="button">Add to server</a>-->
	    <br /><br /><br /><br /><br /><br />
	</div>
	<?php
	if(isset($er_pse) OR isset($er_mail) OR isset($er_avatar)){
	    ?>
	    <section>
	        <div class="alert alert-warning alert-dismissible fade show alerts-main" role="alert">
	            <div class="spacer">
	                <h4 class="alert-heading">Erreur: </h4>
	                <ul>
	                    <?php if(isset($er_pse)){?><li><?php echo $er_pse ?></li><?php } ?>
	                    <?php if(isset($er_mail)){?><li><?php echo $er_mail ?></li><?php } ?>
	                    <?php if(isset($er_avatar)){?><li><?php echo $er_avatar ?></li><?php } ?>
	

	                </ul>
	                <button type="button" class="close" data-dismiss="alert" aria-label="Close">
	                    <span aria-hidden="true">&times;</span>
	                </button>
	            </div>
	        </div>
	    </section>
	

	    <?php
	}
	?>
	<?php
	if(isset($info_avatar)){
	    ?>
	    <section>
	        <div class="alert alert-success alert-dismissible fade show alerts-main" role="alert">
	            <div class="spacer">
	                <h4 class="alert-heading">Succès: </h4>
	                <ul>
	                    <li><?php echo $info_avatar ?></li>
	

	                </ul>
	                <button type="button" class="close" data-dismiss="alert" aria-label="Close">
	                    <span aria-hidden="true">&times;</span>
	                </button>
	            </div>
	        </div>
	    </section>
	

	    <?php
	}
	?>
	<div class="features form-register">
	    <h4>Veuillez remplir tout les champs</h4>
	

	    <div id="form-main">
	        <div id="form-div">
	            <form class="form" id="form1" method="post" enctype="multipart/form-data">
	

	                <p class="pseudo">
	                    <input name="pseudo" type="text" value="<?php if(isset($pseudo)){ echo $pseudo; }else{ echo $afficher_profil['pseudo'];}?>" class="validate[required,length[0,100]] feedback-input" placeholder="Nom d'utilisateur" id="pseudo" />
	                </p>
	

	                <p class="email">
	                    <input name="email" type="text" value="<?php if(isset($email)){ echo $email; }else{ echo $afficher_profil['mail'];}?>" class="validate[required,custom[email]] feedback-input" id="email" placeholder="Email" />
	                </p>
	

	                <p class="password">
	                    <input name="password" type="password" class="validate[required], feedback-input" id="password" placeholder="Mot de passe" />
	                </p>
	

	                <p class="avatar">
	                    <input id="file" type="file" name="file" class="file-selector"/>
	                </p>
	

	                <br />
	                <div class="submit">
	                    <input type="submit" name="submit" class="hover" value="S'inscrire" id="button-blue"/>
	                    <div class="ease"></div>
	            </div>
	

	

	            </form>
	        </div>
	    </div>
	    <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
	</div>
	<?php require "footer.php"; ?>
	<script src="./js/bootstrap.min.js"></script>
	</body>
	</html>

Re @Didoub74,


Pourrais-tu nous envoyer le code de ta page complète ? 🤔

Plus particulièrement le

    header('Content-Type: image/jpeg');

Quand je l'enlève la page marche mais avec une autre erreur

Re:

@Space001 L'image arrive bien dans le dossier, la ligne posant problème se situe dans le bout de code ci-dessus

Re:


J'ai signalé ce soucis à @Clouder...

Si des caractères n'ont pas été pris en compte avec le copier-coller, c'est peut-être la raison pour laquelle l'image n'est pas importée 😉

Le bouton télécharger ne marchant pas, j'ai copié-collé


Re:


Pour obtenir le code, tu as fais un copier-coller ou tu l'as télécharger directement ? 🤔

De mon côté, elle est au format jpg donc oui j'ai essayé,

J'avais pas vu que de base elle était en png et donc j'ai du la convertir dans le passé.


P.S. Le site étant en local, j'ai du demandé à mes parent d''activer la librairie GD (2-3 semaine d'attente)

Re @Didoub74 😎


As-tu essayé avec une image au format JPG ? 🤔

Cette pub permet au site de vivre ...
1
2
3