imagecreatefromjpegを使用して、あるディレクトリから別のディレクトリに画像を同期し、その過程で画像のサイズを変更しようとしています。合計で、スクリプトは15GBの画像ファイルを処理する必要があります。最初は、メモリ制限にぶつかるまで、スクリプトは問題なく実行されていました。次のコードを設定することで、これが修正されたことがわかりました。
ini_set("memory_limit","64M");
しかし、同期された多くの画像の後、同じ問題が何度も何度も発生し、5回目に制限を1000Mに設定するまで何度も発生しましたが、それでも問題は解決しませんでした。9999Mを試した後でも、同じエラーが発生しました。
Fatal error: Allowed memory size of 1778384896 bytes exhausted (tried to allocate 57060 bytes)
phpinfo()を確認したところ、正しく設定されていることがわかりました。
Directive Local Value Master Value
memory_limit 99999M 512M
誰かが私にメモリ制限を増やすための別のオプションを与えることができますか?
同期に使用するコードを追加します。
// SYNCHRONIZE FILES
// GET SOURCE FILES
if ($handle = opendir($hrdir)) {
while (false !== ($file = readdir($handle))) {
if(is_file($hrdir.$file)) {
$nieuwehr_array[$file] = filemtime($hrdir.$file);
}
}
closedir($handle);
}
// GET EXISTING FILES
if ($handle = opendir($hrdestinationdir)) {
while (false !== ($file = readdir($handle))) {
if(is_file($hrdestinationdir.$file)) {
$huidigehr_array[$file] = filemtime($hrdestinationdir.$file);
}
}
closedir($handle);
}
$hr_added_array = array();
$hr_modified_array = array();
// ADD NEW OR MODIFIED FILES
foreach($nieuwehr_array as $file => $change_date) {
if(!isset($huidigehr_array[$file]) || $change_date != $huidigehr_array[$file]) {
new createImage($hrdir, $file, $hrdestinationdir, 800, 600);
touch($hrdestinationdir.$file,$change_date);
if(isset($huidigehr_array[$file])) {
$hr_modified_array[] = $file;
} else {
$hr_added_array[] = $file;
}
}
}
いくつかのオランダの変数名について、事前にお詫び申し上げます。
編集1-12-201112:00:問題が62MBの画像ファイルであることがわかりました。ファイルが大きいように見えますが、55MBを与えるか取るかが問題です。誰かがこれを引き起こす可能性があることを知っていますか?