我有一个应用程序,有时会返回大量的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)会崩溃一切。
理想情况下,在代码的这一点上我可以有两个选项:
理想情况下我想使用第二个选项,但我不知道是否可以这样做...所以我该怎么办才能避免超出内存限制?
编辑: 这是我得到的错误
[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
答案 0 :(得分:0)
我不确定。如果您认为记忆只是问题,那么请根据您的回答大小设置内容长度。
$response = Response::make($contents, $response['status']);
$response->header('Content-Length', strlen(serialize($response));
$response->header('Content-Type', 'json');
return $response;
答案 1 :(得分:0)
这个json大小限制的本质究竟是什么,为什么你觉得它需要实现?
serialize()不会生成json数据,因此您甚至不会检查您声称的相同内容。而且,你正在运行两次相同的繁重操作。
更好的方法是这样的:
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