0

私の PHP アプリケーションでは、Postmarks のインバウンド フックを使用してメールを受信します。このサービスはメールを受信し、JSON エンコードされたメールをサーバー上の URL に送信します。これは正常に機能します。

私が抱えている問題は、メールに 10MB を超える添付ファイルがある場合です。

その結果、

PHP 致命的なエラー: 104857600 バイトの許容メモリ サイズを使い果たしました (1821693 バイトを割り当てようとしました)

私がこの行でやっていることは次のとおりです。

$in = json_decode(file_get_contents("php://input"));

2 つの質問があります。

  1. これをよりメモリ効率的に行う方法はありますか?
  2. メモリ制限が実際には 100MB であるのに、10MB のメールで失敗するのはなぜですか? Base64 + JSON エンコーディングでは、元のサイズの 10 倍のオーバーヘッドが発生しますか?

memory_get_usage() でデバッグした後に編集します。

Script start
47MB memory usage.
$in = file_get_contents("php://input");
63MB memory usage.
json_decode($in);
PHP terminates, due to memory size exhausted.

興味深いことに、コマンドを発行せずに、スクリプトが既に 47MB のメモリ使用量で開始されています。これは入力データが大きいためだと思いますか?たぶん、PHP が $HTTP_RAW_POST_DATA に保存するためでしょうか?

PHP がより少ない変数を作成できるようにするために使用できる php.ini ディレクティブはありますか?

4

1 に答える 1