Quick links: Content - sections - sub sections
EN FR
Quick Search Advanced search
 
Page

  [Opened] [Résolu] TCPDF: Allowed memory size exhausted

Posted by Mathieu147 on 12/06/2010 13:30

Bonjour,

Je voudrais utiliser la réponse tcpdf, mais j'ai un petit soucis: je n'arrive à rien faire, j'ai toujours cette erreur:

Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 71 bytes) in /var/www/lib/jelix/core/jErrorHandler.lib.php on line 62

Comment une allocation de 71 octets pourrait-elle bien être empêchée par la limite de 16Mo?

J'ai essayé faire ini_set("memory_limit","16M");, et même ini_set("memory_limit","256M"); mais ça ne change rien.

Je teste mon script sur mon serveur de développement qui fonctionne avec Ubuntu 10.10 et c'est là que ça coince. Sur mon serveur de production chez OVH, ça fonctionne super bien.

Qu'est-ce qui pourrait causer ça?

Merci!

  [Opened] TCPDF: Allowed memory size exhausted

Reply #1 Posted by foxmask on 12/07/2010 11:03

je regarderai bien avec le phpinfo() sur OVH, quelle est la config PHP pour la ram affectée .


@GitHub - Forum HaveFnuBB! powered by Jelix - Le Booster Jelix !

  [Opened] TCPDF: Allowed memory size exhausted

Reply #2 Posted by Mathieu147 on 12/07/2010 12:17

Bonjour,

D'après phpinfo(), sur le serveur OVH, memory_limit est à 128Mo.

Pour rappel, le serveur OVH, c'est celui sur lequel ça fonctionne.

Même en faisant ini_set("memory_limit","256M"); sur mon serveur de développement (où ça ne fonctionne pas) ça fait toujours la même erreur.

Je me demande si l'erreur vient vraiment de mémoire insuffisante, puisque la quantité de mémoire qu'il demande est plus faible que la limite…

  [Opened] TCPDF: Allowed memory size exhausted

Reply #3 Posted by laurentj on 12/07/2010 18:33

Le 71 octet, ce n'est pas la mémoire total qu'il demande, mais c'est la mémoire qu'il demande en plus à un moment donné.

Ce qui signifie que l'utilisation que tu fais de TCPDF, requiert bien plus que ce que ne te permet la configuration de PHP. Et il arrive à un moment où PHP veut allouer un espace mémoire supplémentaire (de X octets, ici 71, qui peut correspondre par exemple à une instance d'un objet, une nouvelle chaine ...), mais il ne peux plus, d'où l'erreur.

D'ailleurs, il me semble que faire un ini_set sur memory_limit, ça ne fait rien du tout, à vérifier. Le ini_set est limité à seulement un certain nombre d'option de configuration. Il faudrait essayer plutôt de modifier ça dans le php.ini, pas dans le script PHP.

Mais bon, à mon avis, si il demande autant de mémoire, c'est que tu as un souci avec ton script : soit parce que tu génère un PDF trop gros, soit il y a un problème quelque part.

  [Opened] TCPDF: Allowed memory size exhausted

Reply #4 Posted by Mathieu147 on 12/09/2010 08:56

laurentj a dit :
Le 71 octet, ce n'est pas la mémoire total qu'il demande, mais c'est la mémoire qu'il demande en plus à un moment donné.

Ce qui signifie que l'utilisation que tu fais de TCPDF, requiert bien plus que ce que ne te permet la configuration de PHP. Et il arrive à un moment où PHP veut allouer un espace mémoire supplémentaire (de X octets, ici 71, qui peut correspondre par exemple à une instance d'un objet, une nouvelle chaine ...), mais il ne peux plus, d'où l'erreur.

Ah ok je vois, ça me paraît effectivement plus logique.

laurentj a dit :
D'ailleurs, il me semble que faire un ini_set sur memory_limit, ça ne fait rien du tout, à vérifier. Le ini_set est limité à seulement un certain nombre d'option de configuration. Il faudrait essayer plutôt de modifier ça dans le php.ini, pas dans le script PHP.

Aha! On m'aurait donc menti! Je vais vérifier, mais ce qui est étonnant c'est que la limite est identique sur les deux serveurs…

laurentj a dit :
Mais bon, à mon avis, si il demande autant de mémoire, c'est que tu as un souci avec ton script : soit parce que tu génère un PDF trop gros, soit il y a un problème quelque part.

D'accord, mais alors, comment ce fait-ce que chez OVH ça fonctionne? La génération du PDF se fait bien et est rapide. Le résultat a un poids normal (317Ko et il est censé contenir pour 314Ko d'images).

Je vais essayer de monter la limite de mémoire de PHP pour voir ce que ça donne.

Edit: J'ai modifié php.ini pour carrément mettre 1024Mo de RAM pour un script. Quand je regarde dans le moniteur système, je vois que la mémoire se remplit effectivement, mais elle n'atteint pas le Go, elle est interrompue par la limite de 30 secondes pour l'exécution d'un script:

Fatal error: Maximum execution time of 30 seconds exceeded in /var/www/lib/tcpdf/tcpdf.php on line 2522 

Je vais voir dans le fichier tcpdf.php ce qu'il y a à la ligne 2522 et je vois ça:

		/**
<code>
		* Fill the list of available fonts ($this->fontlist).
		* @access protected
		* @since 4.0.013 (2008-07-28)
		*/
		protected function getFontsList() {
			$fontsdir = opendir($this->_getfontpath());
			while (($file = readdir($fontsdir)) !== false) {  //Ligne 2522
				if (substr($file, -4) == '.php') {
						array_push($this->fontlist, strtolower(basename($file, '.php')));
				}
			}
			closedir($fontsdir);
		}
</code>

Je pense donc que j'ai un problème de polices.

  [Opened] TCPDF: Allowed memory size exhausted

Reply #5 Posted by Mathieu147 on 12/10/2010 15:08

Bonjour,

J'ai finalement réussi à faire fonctionner Tcpdf :)

J'avais effectivement un problème avec les polices, j'ai copier/collé celles que j'avais sur le serveur OVH et maintenant ça fonctionne.

 
Page
  1. [Résolu] TCPDF: Allowed memory size exhausted