Se connecter / S'enregistrer
Votre question

Maîtrise de la taille mémoire engendrée par un Script PHP => Fatal error: Allowe

Tags :
  • Script
  • Programmation
Dernière réponse : dans Programmation
29 Juillet 2004 16:05:45

Bonjour,

A l'exécution d'un script, j'ai une erreur fatale d'allocation mémoire =>
Fatal error: Allowed memory size of XXX bytes exhausted (tried to allocate yyy bytes) in …


On me dit qu'il s'agit d'une erreur indiquant que la mémoire aIlouée (7 Mo ?) à un script est dépassée !

1. Je ne traite que des images inférieures à 300 Ko
2. Je crée la mémoire pour une image ( imagecreatefromjpeg($p_path) )
3. Je traite l’image ( calcul de redimensionnement en fonction de la taille de l’ecran client)
4. J’édite l’image
5. Je rend dispo la mémoire ( imagedestroy() )
6. je recommence en 2 jusqu’avoir traité toutes mes images (une dizaine en général)

Même si dans la taille allouée la taille des images doit être prise en compte, ce qui ne me semble pas être le cas, 10x300Ko = 3 Mo + le texte, ça ne fera pas 7Mo !!!

Qu'est ce qui fait partie ou non d'un script (images, texte seul ...) ?
Est ce que cette limite est spécifique à l'hébergeur ?
Dépend elle du pack d'hébergement ?
Comment faire pour maîtriser ces dépassements ?

Merci de vos réponses

Autres pages sur : maitrise taille memoire engendree script php fatal error allowe

29 Juillet 2004 16:25:19

tout dépend, si ton site se trouve chez toi et que tu as apache, un simple changement des settings suffisent a augmenter la memoire alloué a chaque script.
si c'est chez ton hebergeur, il va falloir t'y adapter.
1 Août 2004 13:07:18

Merci,

Mais comment je fais pour analyser mon script et trouver l'espace mémoire utilisé.

Comment réduire cet espace mémoire utilisé ?
6 Août 2004 10:15:16

Salut,

Le problème n'est pas lié au poids de ton fichier, mais à ses dimension ! Pour pouvoir modifier ton image, le script à besoin de la récupérer en bitmap (les pixels un à un avec leur couleurs) du coup, une image de 1600x1200 ca fait 1600x1200x3 = 5 760 000 octets soit 5.5Mo environ. Après je ne sait pas comment gd gère les images, mais modifier 2millions de pixels un à un ca doit prendre un peu de mémoire je pense :) . (je ne sais pas non plus si en recupérant un jpeg il génère l'octet alpha de transparence, ce qui ferait passer notre image de 5.5 Mo à près de 8Mo !)

Apparement ca viens de la derniere version de php (4.3.8) qui doit etre utiliser sur ton serveur, elle rend effective le paramètre memory_limitprésent dans le php.ini !

Les solutions ? ben je patauge un peu là ! Je dirais :
1 - Changer d'hébergeur pour un autre qui n'a pas fait la mise à jour, mais ca pourrait venir !
2 - Essayer de changer le paramètre memory_limit toi_meme avec ini_set si la fonction n'est pas désactivée ou en demandant à ton hébergeur
3 - utiliser des photos plus petite !

Tu pourras avoir qqs infos supplémentaires ici http://forums.ibf-french.com/index.php?showtopic=7729 nottement pour l'histoire de mémoire (si la fonction là aussi n'est pas désactiver :( )
J'ai aussi retrouvé ce petit article sur la 4.3.8 http://www.nexen.net/interview/index.php?id=40
6 Août 2004 12:38:42

J'ai trouvé des solutions ... enfin une réalisable de plusieurs manière, mais c'est pas effectif chez n'importe quel hébergeur ... moi j'ai eu de la chance :D  !

En fait il y a moyen de modifier dynamiquement la variable memory_limit, voilà l'adresse où j'ai trouvé la solution (en anglais) http://www.ez.no/ez_publish/documentation/configuration...

Pour ma part, la solution avec le .htaccess me semblait la moins chiante, et aussi la plus rapide à essayer :)  !
Vous créer un fichier .htaccess (windows ne veux pas alors ajouter le point du début une fois le fichier sur le serveur, mais méfiez-vous selon le client ftp que vous utilisez, le fichier passera peut-etre en invisible :) ) et vous mettez juste à l'interieur
Citation :
<FilesMatch "\.(php|html?)$">
php_value memory_limit 24M
</FilesMatch>
.
Ensuitevous placez le .htaccess dans le dossier contenant les script.php problematique et normalement (si l'hebergeur a pas bloquer le truc) CA MARCHE !

(Ca fait quand meme plaisir apres 3 jours de prise de tete :D )
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS