8722 sujets

Développement web côté serveur, CMS

Bonjour à tous,

J'ai déjà rencontré ce problème auparavant mais il me semble l'avoir esquivé en supprimer des styles et autres contenus utilisant fortement de la mémoire. Mais là impossible pour moi d'y échapper Smiley ohwell .

Je génère une vue de reporting contenant le planning de mes affichages (publicité) sur un ou plusieurs jours. Lorsque mon reporting est court ; je n'ai pas de problème il se génère correctement (donc pas de fautes de boucles qui ne s'arrête pas ou autres...). Je fait ce test sur un jour et 2jours (où il y a peu de diffusion). Les fichiers d'export ce sont bien généré et avec tous les beaux styles qui vont bien.

Je génère un fichier d'export sur un jour ayant diffusé toute une journée (beaucoup beaucoup d'affichage) et la il me plante lâchement :
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 32 bytes) in  ...


J'ai donc essayé çà en haut de mon script :
ini_set('memory_limit','2048M');


J'ai aussi essayé çà aprés mon appel de librairie PHPExcel : (vu dans un post)
$cacheMethod = PHPExcel_CachedObjectStorageFactory:: cache_to_phpTemp;
$cacheSettings = array('memoryCacheSize ' => '1024MB', 'cacheTime' => 6000);
PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);


çà n'a pas changé grand chose hormis le "tried allocate".

Est ce que quelqu'un a déjà rencontré ce problème ? Et a trouvé une solution ?

Merci.
Modifié par mini-truc (12 Nov 2013 - 11:16)
Re à tous,

C'est bien une question de memory_limit ; en modifiant directement depuis php.ini cela fonctionne ; il agrandi ma mémoire et le script se déroule correctement. J'ai donc fait des tests avec phpinfos et ini_set et en effet il ne prend pas en copte mon ini_set(memory).

Je ne comprend pas pourquoi le serveur ne prend pas en compte cette données, sachant que c'est un serveur dédié et que les droits m'en autorisent oO (ou pas mais ce devrait être le cas)?
Si je ne m'abuse, les paramètres qui concernent la mémoire ne sont pas modifiables par ini_set, question de sécurité et aussi parce que ces paramètres sont utilisés uniquement pendant l'initialisation de php en interne, donc au moment où ton script démarre c'est déjà trop tard.
Merci de ta réponse QuentinC, en effet depuis une version X de PHP memory_size n'est plus modifiable à partir d'un ini_set() ; il faut donc passer obligatoirement par un ht_access contenant :

php_value memory_size [x]M


Pour qu'un htaccess fonctionne il faut également que sur votre serveur votre allowoverride soit à :
Allowoverride options ou Allowoverride all


J'avais justement bûcher sur ce problème la dernière fois.

Bonne journée à tous.