Out of memory avec imap_fetchbody() et 1&1.

Petit nouveau ! | 2 Messages

22 déc. 2012, 21:46

Bonjour à tous,

Je me trouve face à une difficulté que j'ai du mal à comprendre.
Je suis entrain de coder un mini webmail en php et lorsque je fait appel à la fonction imap_fetchbody() sur un mail un peu important (en taille) j'ai l'erreur suivante :
Fatal error: Out of memory (allocated 1572864) (tried to allocate 28041966 bytes) in...

Lorsque que je dis que j'ai du mal à comprendre c'est que 1&1 offre 90Mo de mémoire pour exécuter un script. De plus en local en limitant également à 90Mo cela fonctionne très bien et la fonction memory_get_peak_usage(true) retourne la valeur de 31Mo ce qui est correct.
Je suis un hébergement "premier prix" et je n'ai donc pas accès au php.ini etc...

Cela fait plusieurs mois que je cherche une solution, d'ailleurs si je fait quelque chose dans le gendre :
for($i=0;$i<100000000;$i++) {
$str .= "a";
echo "<br />".memory_get_peak_usage(true);
}

Je monte jusqu'a 50Mo alloué avant d'avoir l'erreur (trie to allocate 49Mo) ce qui est normal puisqu'il recopi toute la chaine de caractère dans une nouvelle chaine plus longue. Donc dans ce cas là j'ai bien les 90Mo utilisables.

Si quelqu'un pouvait m'aider ça serai vraiment sympa.
Un grand merci par avance.

Eléphant du PHP | 130 Messages

23 déc. 2012, 12:28

C'est parce que le memory_limit est trop faible, il faut modifier sa valeure dans le php.ini ou un autre fichier si tu as une conf qui surcharge le php.ini. Normalement tu as pas besoin d'autant de mémoire, même de grosse application php n'utilise pas plus de 64Mo de memory_limit.
N'y a t'il pas de fuite mémoire dans le code ? La version de php que tu utilises est elle la 5.3 ou supérieure car à partir de la version 5.3 le garbage collector est mieux géré.

Petit nouveau ! | 2 Messages

29 déc. 2012, 18:21

Bonjour,

J'ai la version 5.2.17 de PHP pour le moment sur 1&1, mais j'ai reçu une information comme quoi il sont entrain de passer à une version plus récente.

J'ai un hébergement de base et je ne peu pas surcharger le php.ini avec une valeur de memory-limit plus grand que celle initiale de 90Mo, Je sais bien que c'est un valeur assez importante et que je n'ai aps besoin d'autant de mémoire, mais qu'il me bloque à 28Mo c'est pas normal en me disant que j'ai un dépassement de mémoire c'est ça qui est bizarre.