Steve TENZA
Web développeur
Facebook Me contacter Cookie
Télécharger
Noter:
Ajouté/Modifié le 2025-01-19
Visionné 1752 fois

Solution Imagick - unable to open file, error/constitute.c/ReadImage

Description

Je dois avouer que j'ai passé pas mal de temps à chercher d'où elle venait avant de comprendre que tout était lié au format d'image non pris en charge (pour ma part, du moins). Maintenant que j'ai trouvé la solution, ça me fait vraiment plaisir de la partager avec vous. J'espère qu'elle vous fera gagner du temps.

PHP Fatal error: Uncaught ImagickException: unable to open file `/tmp/magick-XXXXXX': No such file or directory @ error/constitute.c/ReadImage/544 (544 est peut-être la ligne où s'est produite l'erreur, elle peut donc être différente pour vous suivant la version installée)

Si vous rencontrez cette erreur, voici comment la résoudre :

Origine de l'erreur

Cette erreur arrive quand vous utilisez new Imagick() pour charger une image dans un format qui n'est pas pris en charge par votre version d'ImageMagick installée sur votre serveur. Par exemple, des formats comme HEIC ou WEBP ne sont pas supportés par défaut dans certaines versions, comme la 6.9 par exemple.

Étapes pour corriger

  1. Mettre à jour la version d'ImageMagick. (Facultatif)
  2. Si vous ne pouvez pas mettre à jour ImageMagick (serveur mutualisé par exemple, sans possibilité de mises à jour), convertissez l'image au préalable en un format supporté comme JPEG ou PNG :

    <?php
    // exemple de conversion
    // image déjà présente sur le serveur
    $file = 'image_non_supportee.extension';
    $imagick = new Imagick();
    $imagick->readImage($file);
    $imagick->setImageFormat('png');
    $imagick->writeImage('image_convertie_et_supportee.png');
    ?>

Prévenir les erreurs

Ajoutez une simple vérification avant d'utiliser new Imagick().

Imagick::queryFormats() permet de récupérer tous les formats que votre version d'imagemagick prends en charge, pratique, il vous suffit de faire une simple vérification avec in_array.


<?php
// récupère la liste des extensions supportées (attention : pas seulement des extensions d'images)
$formats_supportes = Imagick::queryFormats();
$image = 'image.ext';

// obtenir l'extension du fichier
// la seule vérification de l'extension, n'est pas sûre ! Il faut vérifier le mime_type du fichier également, par exemple un fichier .jpg peut en réalité être un WEBP.
$extension = strtolower(pathinfo($image, PATHINFO_EXTENSION));

// si non pris en charge, afficher une erreur
if(!in_array(strtoupper($extension), $formats_supportes))
exit("Le format $extension n'est pas supporté."); // affiché pour l'exemple, attention aux failles XSS

// tout est OK, utiliser l'image
$imagick = new Imagick($image);
?>

Vérifier le type MIME, plus sûre que l'extension

Facile à utiliser et inclus dans PHP, la fonction PHP mime_content_type() nous sera utile et pratique car elle prend à la fois un fichier déjà présent sur le serveur, ou un fichier en cours de transfert, récupéré via $_FILES['input_name']['tmp_name'].

Le seul inconvénient de cette méthode c'est que vous devrez créer un tableau de vos MIME type pris en charge (voir à la variable $mime_type_supportes, dans le code ci-dessous).


<?php
// Fichier à vérifier
$image = 'image.ext';

// on obtient le type MIME avec mime_content_type
$mime_type = mime_content_type($image);
if($mime_type === false)
exit("Impossible de déterminer le type MIME du fichier.");

echo "MIME-Type détecté : $mime_type<br>"; //affiché à des fin de tests

// tableau des types MIME supportés
$mime_type_supportes = ['image/jpeg', 'image/png', 'image/gif'];

// vérifie si le type MIME est supporté
if(!in_array($mime_type, $mime_type_supportes))
exit("Format non pris en charge : $mime_type");

// traiter l'image avec Imagick si le format est validé et pris en charge
$imagick = new Imagick($image);
?>


J'espère que ce script gratuit vous sera utile dans vos projets.
Si vous souhaitez soutenir mon travail, un simple clic sur le bouton "Donner remercier" ci-dessous ou une note serait grandement apprécié. Merci pour votre générosité !
Votre réussite en ligne commence ici

Vous cherchez à pousser encore plus loin vos idées ou à les concrétiser avec un site internet sur mesure ? Je suis là pour vous aider ! Mon expérience en développement web est à votre disposition.

Que ce soit la création de votre site web pro ou l'apport de fonctionnalités avancées à votre projet, contactez-moi pour en discuter et avoir un devis gratuit personnalisé.

Mon objectif est de vous offrir des solutions sur mesure qui répondent à vos besoins, et votre vision associée à mon expertise donnera vie à votre projet web parfait. Contactez-moi aujourd'hui, je réponds en général en moins d'une heure :

Demander un devis
Réponse rapide !

Vous recherchez un script précis ?

Dites-moi ce dont vous avez besoin, je peux développer le script demandé et vous envoyer un mail dès qu'il est dispo !

🔔 Vous pouvez laisser votre mail pour recevoir les nouveaux scripts. Pas de pub, pas de tracas. Vous êtes libre de le supprimer à tout moment.

Je prends en compte toutes les demandes. Les idées les plus populaires passent en priorité et seront publiées dès qu'elles seront prêtes. 2842 demandes reçues.

Commentaires

Ajouter un commentaire

Commenter
Pseudo/Nom
Email
Message
Captcha
memo1memo2
Commenter
Ajoutez un commentaire, soyez le premier !

Retour à la liste des scripts

Un site à créer ?
Contactez-moi