2010-12-07 13 views
2

ディレクトリをループしてその中のすべてのイメージを特定のサイズに編集するスクリプトがあります。問題は1,000画像の合計が300MBまでです。複数のファイルを編集するPHPメモリ制限の問題

各ループの後にこの作成されたイメージをメモリから削除して、php memory_limitにカウントされないようにする方法はありますか、またはメモリの制限を-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

コンソールから実行してもらいたいですか? :)もしそうなら、小さなタスクで分割してみてください。もちろん、 'memory_limit'を-1に設定することはできます。しかし、それは危険です。 – thedom

答えて

4

あなたが渡された画像リソースに関連付けられている任意のメモリクリーンアップされ、imagedestroyを起動してみてください:あなたがディスクに書き込まれてきた後にimagedestroyていることを確認してください

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

完璧、私はこれを試します – kalpaitch

1

を - そうでなければ、新しいイメージをそれぞれメモリに追加します。

0

memory_limitをphp.iniに変更すると、デフォルトで16MBを超えるものに変更できます。

私の場合は64または128で十分です。また、あなたはimagedestroyでメモリを解放することができます。例:

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

このようにして、使用されたメモリが解放されます。

+0

あなたは正しいですが、このスクリプトはいくつかの異なる共有ホスティングプロバイダの間で渡されていますので、私はより簡単な解決策を探していました。 – kalpaitch