CURL を使用してリモート イメージを取得すると、いくつかの致命的なエラーが発生します。
エラー メッセージ: PHP Fatal error: Out of memory (allocated 786432) (266241 バイトを割り当てようとしました)
リモート画像を取得して変数に返すように設計された関数があります。
function download_file($file, $ref)
{
$curl_obj = curl_init();
curl_setopt($curl_obj, CURLOPT_URL, $file);
curl_setopt($curl_obj, CURLOPT_HEADER, 0);
curl_setopt($curl_obj, CURLOPT_REFERER, $ref);
curl_setopt($curl_obj, CURLOPT_BINARYTRANSFER, 1);
curl_setopt($curl_obj, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl_obj, CURLOPT_MAXREDIRS, 3);
curl_setopt($curl_obj, CURLOPT_FOLLOWLOCATION, TRUE); //followlocation cannot be used when safe_mode/open_basedir are on
curl_setopt($curl_obj, CURLOPT_SSL_VERIFYPEER, FALSE);
if(!$downloaded_binary = curl_exec($curl_obj)){
$downloaded_binary = false; // downloading failed, return false
}
curl_close($curl_obj);
unset($curl_obj);
return $downloaded_binary;
}
curl_exec が呼び出されたときにエラーが発生します。
バックグラウンド
- 特定のリクエストで障害が発生しない
- メモリ制限が 3GB に増加しました
- Imagick は、画像変換タスクの実行に使用されます
- 各画像は 100kb 未満です
- 一部のドキュメントには、500 ~ 600 ページの個別のページが含まれています
- PHP 5.4.9 の実行 (Windows 64 ビット)
- これはコマンド ラインから実行され、Web サーバーには接続されません。
- レコードあたりの平均処理時間 (レコード内のすべての画像を含む) は 3.5 秒です。
アプリケーション自体は、独自のドキュメント管理システムから画像 (TIFF) データをエクスポートし、関連する画像を 1 つの PDF ドキュメントに変換して、ファイルを論理構造に書き出します。
各 curl インスタンスは新しいハンドルでなければならないため、失敗は私には意味がありません。
これに関するヘルプや指示は大歓迎です!
編集
IMagick::setResourceLimit(imagick::RESOURCETYPE_MEMORY, 3072); という行を追加することで、問題を解決できたと思います。IMagick::setResourceLimit(imagick::RESOURCETYPE_MAP, 3072);
この投稿で見つかりました: PHP Imagick メモリ リーク