1

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 メモリ リーク

4

0 に答える 0