2

HTML のチャンクを時々返すアプリケーションがあります。この場合、大きなテーブルを返す必要があり、メモリが使い果たされます。

返されるデータが許可されたjson制限を超えていないことを確認するマクロを設定しました。

Response::macro('jsonWithValidation', function($response) {
    if(strlen(serialize($response)) > 125000000)
        $response = array(
            'status' => 200,
            'execute_also' => array(
                'notify("warning", "Data too large to be sent over json");'
            )
        );

    return Response::json($response, $response['status']);
});

このスクリプトはおまじないとして機能します。私が今直面している問題は、最後Response::jsonがメモリを使い果たすことです。これは、json で送信するには応答が大きすぎないことを意味しますが、Laravel メソッド (Laravel 4.2 を実行しています) はすべてをクラッシュさせます。

理想的には、コードのこの時点で、次の 2 つのオプションを使用できます。

  • 基本的なphpですべてを送信しますが、Laravel関数はすでにかなり基本的だと思います
  • 応答に必要のないメモリをクリアする

理想的には2番目のオプションを使用したいのですが、これができるかどうかわかりません...では、メモリ制限を超えないようにするにはどうすればよいですか?

編集:これは私が得るエラーです

[05-May-2016 14:19:42 Europe/Rome] PHP Fatal error:  Allowed memory size of 134217728 bytes exhausted (tried to allocate 64 bytes) in C:\wamp\www\project_ski\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Model.php on line 446
4

2 に答える 2

0

このjsonサイズ制限の性質は正確には何ですか?なぜそれを実装する必要があると思いますか?

serialize() はjsonデータを生成しないため、主張するのと同じことをチェックしていません。さらに、同じ重い操作を 2 回実行しています。

より良いアプローチは、次のようなものです。

Response::macro('jsonWithValidation', function($response) {

    $return = Response::json($response, $response['status']);

    if(strlen($return) > 125000000)
        $return = array(
            'status' => 200,
            'execute_also' => array(
                'notify("warning", "Data too large to be sent over json");'
            )
        );

    return $return;
});

また、エラーを返す場合、http ステータス コードは 200 OK であってはなりません。詳細はこちら: http://www.restapitutorial.com/httpstatuscodes.html

于 2016-05-05T11:16:46.533 に答える