Fatal error: Allowed memory size

Résolu
LiTtLeBuBu Messages postés 50 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 10 février 2009 - 8 janv. 2008 à 17:32
LiTtLeBuBu Messages postés 50 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 10 février 2009 - 8 janv. 2008 à 22:21
Bonjour à tous,

J'ai un code qui crée des miniatures après upload des photos. Quand j'envoi des photos de 400ko environ il n'y a aucun soucis mais lorsque les photos ont un poids de 1MO et plus il y a problème "Fatal error: Allowed memory size......"

Voici le code qui crée les miniatures:

<?php


function createthumb($name,$filename,$new_w,$new_h){
 $system=explode('.',$name);
 if (preg_match('/jpg|jpeg|JPG|JPEG/',$system[1])){
  $src_img=imagecreatefromjpeg($name);
 }
 if (preg_match('/png/',$system[1])){
  $src_img=imagecreatefrompng($name);
 }


$old_x=imageSX($src_img);
$old_y=imageSY($src_img);
if ($old_x > $old_y) {
 $thumb_w=$new_w;
 $thumb_h=$old_y*($new_h/$old_x);
}
if ($old_x < $old_y) {
 $thumb_w=$old_x*($new_w/$old_y);
 $thumb_h=$new_h;
}
if ($old_x == $old_y) {
 $thumb_w=$new_w;
 $thumb_h=$new_h;
}


$dst_img=ImageCreateTrueColor($thumb_w,$thumb_h);
 imagecopyresampled($dst_img,$src_img,0,0,0,0,$thumb_w,$thumb_h,$old_x,$old_y);


if (preg_match("/png/",$system[1]))
{
 imagepng($dst_img,$filename);
} else {
 imagejpeg($dst_img,$filename);
}
imagedestroy($dst_img);
imagedestroy($src_img);
}


?>

et ce qu'il y a dans ma page pour 6 photos donc ce code 6 fois de suite:

<?php

if (empty($dest_fichier1))
    {
    $photo1 = "default.jpg";  
    }
    else
    {
    $photo1 = $dest_fichier1;
   createthumb($dest_dossier . $dest_fichier1, $dossier_thumbs . $dest_fichier1, $taille_thumbs1, $qualite_thumbs1);
    createthumb($dest_dossier . $dest_fichier1, $dossier_final . $dest_fichier1, $taille_thumbs2, $qualite_thumbs2);
   unlink($dest_dossier . $dest_fichier1);
   }
?>

Quelles sont les solutions ?

D'avance merci.

11 réponses

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
8 janv. 2008 à 20:01
Et puis à la limite si tu parviens à travailler sur une image comme ça, tu n'y arriveras pas sur plusieurs en boucle.
Normal...PHP ne libèrera pas les ressources correctement ni complètement.
3
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
8 janv. 2008 à 18:26
Hello,

travailler sur de plus petites images...
Non, GD est gourmand de toute manière. On est sur une techno web là, il ne faut pas l'oublier, c'est pas Photoshop ton truc. Faut pas trop lui en demander.
Seule solution à part ça : modifier la conf de php si tu le peux. Il s'agit de cette directive :
memory_limit
tu peux la modifier dans le php.ini, ou via un ini_set().
SI ton hébergement te le permet...
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
8 janv. 2008 à 18:40
mon appareil fait des photos de : 3072 * 2304

multiplie par 3 pour avoir des couleurs 24 bits

une fois decompresse, mon jpeg prend :

3072 * 2304 * 3 octets de memoire

>>> 3072 * 2304 * 3
21233664
>>> 21233664 / 1024
20736
>>> 21233664 / 1024 / 1024
20
>>>

ca fait en gros 20 MO de memoire

/**
* @author coucou747 <coucou747@hotmail.com>
* @see irc://cominweb.uni-irc.net/#programmation
*/
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
8 janv. 2008 à 19:26
et ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
8 janv. 2008 à 19:28
Mon "et?" n'est pas "méchant" hein, c'est juste que je n'ai pas compris où tu voulais en venir en disant ça ?
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
8 janv. 2008 à 19:37
c'est juste pour donner un ordre d'idee de ce qui consome GD

perso j'ai :

max@debian:~$ cat /etc/php5/apache2/php.ini | grep memory_limit
memory_limit = 128M      ; Maximum amount of memory a script may consume (128MB)
max@debian:~$

/**
* @author coucou747 <coucou747@hotmail.com>
* @see irc://cominweb.uni-irc.net/#programmation
*/
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
8 janv. 2008 à 19:56
Ben essaye de travailler ton image avec GD et ce php.ini. Tu n'y arriveras pas.
Prend n'importe quel logiciel de retouche photo, fous lui une image de 20Mo, bosse dessus et regarde tes ressources CPU et la mémoire utilisée surtout. C'est exponentiel. Une image de 20Mo ne prend pas 20Mo de mémoire pour travailler dessus. Ce sera beaucoup plus gourmand.
0
LiTtLeBuBu Messages postés 50 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 10 février 2009
8 janv. 2008 à 20:03
Si je comprends bien je peux mettre


ini_set("memory_limit", "128M")

Celà fonctionne t-il en safe mode ?
0
LiTtLeBuBu Messages postés 50 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 10 février 2009
8 janv. 2008 à 20:05
D'accord donc la seule solution c'est de les réduire avant.

D'accord merci.
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
8 janv. 2008 à 20:06
128M c'est par défaut, normalement. Je ne sais pas pour safe_mode. A priori...non. Mais bon.
0
LiTtLeBuBu Messages postés 50 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 10 février 2009
8 janv. 2008 à 22:21
Si je regarde le phpinfo() la limite est à 40M. Comme c'est un hebergement mutualisé je n'ai pas accès a php.ini.

Je vais faire un test avec ini_set().

Merci.
0
Rejoignez-nous