2010-08-18 4 views
2

Je travaille sur un script qui liste toutes les images dans un répertoire, puis redimensionne et enregistre dans un autre répertoire.Comment fonctionne l'utilisation de la mémoire en PHP lors de la sauvegarde des images?

Dans mon serveur partagé, je reçois ce message:

Allowed memory size of 67108864 bytes exhausted (tried to allocate 600 bytes) in... 

La question est: Si PHP peut libérer la mémoire après chaque création d'image à l'aide image_destroy(), pourquoi la boucle while que sauver ces images sortir de la limite de la mémoire?

-

Le code juste enregistrer les images, rien de plus. Le problème est avec la quantité d'images, pas avec une seule image énorme. Chaque image n'a pas plus de 300 Ko et le script s'arrête au milieu, et il n'y a pas de point exact. Chaque fois qu'il est exécuté, il s'arrête dans certaines images.

foreach($images as $image) 
{ 
    $img = PhpThumbFactory::create($image); 
    $img->adaptiveResize(640, 450); 
    $img->createWatermark(PATH_TEMPLATE_SITE . 'img/watermark.png'); 
    $img->save($dirBig . $id . '.jpg','jpg'); 
} 

La classe utilisée dans ce script est PHPThumb, et ont le destructor:

public function __destruct() 
{ 
    if (is_resource($this->oldImage)) 
    { 
     imagedestroy($this->oldImage); 
    } 

    if (is_resource($this->workingImage)) 
    { 
     imagedestroy($this->workingImage); 
    } 
} 

J'ai alredy même d'enregistrer des images avec d'autres scripts problème. Je pense que le problème n'est pas avec cette classe, ou tout autre type de données utilisées dans le script.

+3

Postez votre code. 'image_destroy' ne libère que la mémoire liée à la représentation interne de l'image. Si vous stockez d'autres informations, elles peuvent ne pas être diffusées ... De plus, les images utilisent un peu de mémoire ... Êtes-vous sûr de ne pas charger d'énormes images? – ircmaxell

+1

Pouvez-vous nous montrer le code que vous utilisez? – Frxstrem

+0

"Comment fonctionne l'utilisation de la mémoire en PHP?" Mal: p – meagar

Répondre

0

Le problème semble être avec le plugin filigrane, qui obtient une instance de la classe parent et mis dans un membre privé. Je ne sais pas exactement, mais en enlevant le membre privé et en traitant la classe parent juste comme un paramètre, le problème a été résolu.

J'ai également ajouter un rafraîchissement après 20 images enregistrées.

Questions connexes