problème de memory_limit - PHP - Programmation
Marsh Posté le 25-05-2007 à 10:48:11
si ton hebergeur le permet, tu peux utiliser une commande externe
sinon au lieu de stocker $zip->file() dans une variable, fais un echo direct
echo $zip->file(); |
Marsh Posté le 25-05-2007 à 11:01:27
soju a écrit : si ton hebergeur le permet, tu peux utiliser une commande externe sinon au lieu de stocker $zip->file() dans une variable, fais un echo direct |
merci mais non ... il ne le permet pas, d'ailleurs il n'y en a pas beaucoup qui l'autorise non?
Marsh Posté le 19-06-2007 à 09:53:13
t'as essayé de faire le echo direct sans passer par une variable ?
Marsh Posté le 19-06-2007 à 17:14:43
oui
ce que je ne comprends pas c'est pourquoi il m'indique que je n'utilise que 4292304 bytes alors que la limite est de
16777216 bytes ???
Marsh Posté le 19-06-2007 à 17:22:45
Non ça t'indique que l'erreur s'est produite au moment où tu as essayé d'allouer 4292304 bytes et que cette allocation a été refusée parcequ'elle te faisait dépasser la limite. Ca n'indique pas la quantité déjà allouée.
Marsh Posté le 19-06-2007 à 17:26:39
t'as bien viré la ligne $archive = $zip->file(); ?
zbang a écrit : 4292304 bytes |
c'est le nombre d'octets en trop (edit : grilled)
sinon c'est qui ton hebergeur ? chez ovh par exemple en mutualisé l'utilisation de commande externe est possible
Marsh Posté le 19-06-2007 à 17:29:01
Sinon pour l'optimisation, le problème est que, visiblement, la lib zip que tu utilises garde tout en mémoire, donc au bout d'un certains nombre de fichiers (ça doit dépendre de leur taille), ça pète.
Solutions :
- utiliser une lib zip plus performante ?
- revoir ton algo pour écrire le fichier zip sur le disque au fur et à mesure pour libérer la mémoire. Par contre ça sera surement plus lent (de toutes façons il faut toujours faire un choix entre vitesse et occupation mémoire)
Marsh Posté le 19-06-2007 à 17:33:54
soju a écrit : t'as bien viré la ligne [i]$archive = $zip->file(); |
Ca demande à être vérifié, mais il me semble que php est suffisamment intelligent pour ne pas recopier le contenu de la variable si elle n'est pas modifiée plus loin dans le code (ce qui est le cas ici), il doit faire simplement une référence. Du moins j'espère...
Marsh Posté le 20-06-2007 à 09:43:53
merci pour vos réponses
j'ai bien viré $archive = $zip->file();
je me retrouve avec ça :
Code :
|
cgo2 >
"utiliser une lib zip plus performante ?" tu en as une à me conseiller?
"revoir ton algo pour écrire le fichier zip sur le disque au fur et à mesure pour libérer la mémoire" tu pense à quelque chose en particulier?
Marsh Posté le 20-06-2007 à 10:00:59
zbang a écrit : "utiliser une lib zip plus performante ?" tu en as une à me conseiller? |
Aucune idée, j'ai jamais eu besoin de faire du zip, mais si l'occasion se présentait je pense que je me pencherais du côté de l'extension standard de PHP :
http://fr.php.net/manual/fr/ref.zip.php
zbang a écrit : "revoir ton algo pour écrire le fichier zip sur le disque au fur et à mesure pour libérer la mémoire" tu pense à quelque chose en particulier? |
Non, je ne connais pas ta librairie ni les méthodes qu'elle propose. C'est juste une indication en général : quand un algo prend trop de mémoire, tu t'arranges pour utiliser le disque au fur et à mesure (c'est le principe du swap quoi). Après c'est à toi de voir si cette solution est possible dans ton contexte.
Marsh Posté le 20-06-2007 à 19:33:32
merci pour ta réponse, je vais voir du coté de la lib zip standard.
Marsh Posté le 25-05-2007 à 10:10:44
Bonjour à tous,
Y-a-t-il moyen d'optimiser ce code pour éviter de me retrouver avec une erreur :
Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 4292304 bytes)
Pour info,
- ces fichiers à zipper font 600k
- le memory_limit de mon hébergeur est de 16Mo
- modifier le memory_limit avec ini_set n'est pas permis (ni via .htaccess)
- je n'ai pas les moyen de passer sur un dédié :-)
6 fichiers ça passe ... 7 ça coince et idéalement il m'en faudrait 12 :-\
Merci d'avance pour vos lumières