Bonjour,

J'espere trouver de l'aide à mon probleme je suis bloqué depuis un bon moment et malgré de nombreuses recherches je ne trouve pas comment faire...
J'utilise le framwork Codeigniter et la librairies imagine pour creer des miniatures d'images a la volée dans mon site.
Le probleme est que mon code de creation de miniature bug si je poste une image haute resolution ... (exemple 3000x4000).
Comment faire pour resoudre ce probleme, d'ou vient cette limitation ?

Ce que je fais

Voici la class de ma librairies image qui effectue le cropping a la volée :
Image.php :around

class Image{

    static function crop($image,$width,$height)
    {
        $info = pathinfo($image);

        //Je creer mes miniatures dans un dossier min
        $folder = $info['dirname'].'/min/';
        if(!is_dir($folder))
        {
           mkdir($folder,0777);
        }

        //Je rajoute les parametres au nom de mon image
        $dest = $folder.$info['filename']."_$width"."x$height.".$info['extension'];
        if(file_exists($dest))
        {
            //return base_url($dest.'?'.rand());
            return base_url($dest);
        }

        require_once (APPPATH."libraries/imagine.phar"); 
        $imagine = new Imagine\Gd\Imagine();
        $size = new Imagine\Image\Box($width,$height);
        $options = array(
            'quality' => 100,
        );
        $imagine->open($image)->thumbnail($size,'outbound')->save($dest,$options);

        return base_url($dest); 

    }
}

Dans une page html comment je l'appelle :

<img  src="<?php echo Image::crop($r->image,340,200).'?'.rand();?>" alt="image">

Lorsqu'une image est trop grande ( je ne saurais dire a partir de quelle taille d'ailleurs) mon script plante carrement, la miniature n'existe pas et du coup toute ma page est stoppé a partir de l'erreur de la miniature ... ce qui est assez pénible.

10 réponses


Carouge10
Réponse acceptée

Maintenant dans "/bin/php/votre_version_de_php/, ouvrez le fichier php.ini
Dans ce fichier trouver la ligne contenant "memory_limit =" vers la ligne 417 pour moi.
Redémarrer Mamp et vérifier si l'erreur apparait toujours

Bonjour,
Es-tu sur que cela viens de ton script ?

  • Cela peut venir de la configuration de la librairie (ce que je ne pense pas)
  • Cela peut venir du temps d'exécution de ton script.

As-tu regarder du côter des logs pour savoir s'il y avait quelque chose ?

Salut,

Je rejoins @Carouge10, regarde tes logs d'erreurs.
De plus, j'ai une petite remarque : si tu as 10 images sur ta page et que tu appelles ta classe pour chacune d'elle, en fonction de la taille de tes images ça va faire une sacré charge pour ton serveur ! C'est dynamique ou tu as possibilité d'enregistrer les dites images déjà croppées ?

xenos92
Auteur

Bonjour merci pour vos réponses,
@Carouge10 excuse ma question, je suis encore débutant ou puis-je voir ces fameux logs ? Oui je pense aussi que ca doit venir du temps d'execution mais comment faire ?
@betaWeb Oui dans mon script les images sont crees dans un dossier min si elles n'existent pas sinon elles sont recuperées

Tu travailles en local ou en ligne ?
Wamp, xamp....

xenos92
Auteur

Je travaille sur Mamp en local

Danc le dossier de Mamp, tu vas avoir dedans un dossier "logs" avec des fichiers.
Regarde dans "php_error"

xenos92
Auteur

Merci ;)
Ca m'affiche ceci :

[19-Oct-2017 20:43:44 Europe/Berlin] PHP Fatal error:  Allowed memory size of 134217728 bytes exhausted (tried to allocate 48000001 bytes) in phar:///Applications/MAMP/htdocs/app/armee_project/application/libraries/imagine.phar/Gd/Image.php on line 2
xenos92
Auteur

Mon memory_limit est de 128M

EDIT : Ah ba nickel je l'ai passé a 256M et ca à l'air de fonctionner ;)
Super merci @Carouge10 j'ai appris un truc ce soir :)

Essaye de le doublé pour voir