2010-12-07 4 views
2

J'ai un script qui parcourt un répertoire et édite toutes les images qu'il contient à certaines tailles, le problème étant qu'il y a 1000 images totalisant 300 Mo.Problème de limite de mémoire PHP modifiant plusieurs fichiers

Existe-t-il un moyen de supprimer cette image créée de la mémoire après chaque boucle afin qu'elle ne compte pas dans php memory_limit ou dois-je simplement définir une limite de mémoire de -1?

foreach($image as $file){ 
    // obviousment this provides a valid image resource 
    $new_image = Common::resizeImg($file['tmp_name'], $file['ext'], 215, 121); 
    imagejpeg($new_image, SERVER_ROOT."/img/media/small-".$id.$file_ext, 100); 

    // clear/reset this memory??? 
} 
+0

J'espère que vous exécutez cela à partir de la console? :) Si oui, essayez de le diviser en tâches plus petites. Mais bien sûr, vous pouvez définir 'memory_limit' à -1. Mais cela peut être dangereux. – thedom

Répondre

4

Vous pouvez invoquer imagedestroy, qui nettoiera une mémoire associée à la ressource image passée dans:

foreach($image as $file){ 
    // obviousment this provides a valid image resource 
    $new_image = Common::resizeImg($file['tmp_name'], $file['ext'], 215, 121); 
    imagejpeg($new_image, SERVER_ROOT."/img/media/small-".$id.$file_ext, 100); 

    imagedestroy($new_image); 
} 
+0

parfait, je vais essayer cela – kalpaitch

1

Assurez-vous imagedestroy une fois que vous avez écrit sur le disque - sinon vous Ajoutez chaque nouvelle image en mémoire.

0

Vous pouvez modifier le memory_limit dans php.ini pour tout ce qui dépasse les 16 Mo par défaut.

Dans mon cas je l'ai mis en 64 ou 128 ce qui est suffisant. Aussi, vous pouvez libérer la mémoire avec imagedestroy. Par exemple:

$ image = imagecreatetruecolor (100, 100); imagedestroy ($ image);

De cette façon, cela libère la mémoire utilisée.

+0

Vous avez raison, mais ce script est passé entre un certain nombre de fournisseurs d'hébergement partagés différents, donc je cherchais une solution plus simple. – kalpaitch

Questions connexes