Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel API覆盖默认413有效负载响应过大_Php_Laravel - Fatal编程技术网

Php Laravel API覆盖默认413有效负载响应过大

Php Laravel API覆盖默认413有效负载响应过大,php,laravel,Php,Laravel,我正在用我的LaravelAPI创建文件上传器,但是当我上传一个太大的文件时,响应会变得混乱,我真的不知道如何解决这个问题。以下是我的邮递员请求的屏幕截图: 正如您所看到的,如果有application/jsonheader,那么困扰我的是空json响应之前的PHP错误。相反,我想要的是警告消息不会出现,并且响应是定制的 我尝试将异常添加到我的Handler.php中,如下所示,但差别不大(尽管我不能100%确定这是正确的异常,因为它没有被记录): 我要发布到的控制器功能: public fu

我正在用我的LaravelAPI创建文件上传器,但是当我上传一个太大的文件时,响应会变得混乱,我真的不知道如何解决这个问题。以下是我的邮递员请求的屏幕截图:

正如您所看到的,如果有
application/json
header,那么困扰我的是空json响应之前的PHP错误。相反,我想要的是警告消息不会出现,并且响应是定制的

我尝试将异常添加到我的
Handler.php
中,如下所示,但差别不大(尽管我不能100%确定这是正确的异常,因为它没有被记录):

我要发布到的控制器功能:

public function uploadTo(Request $request, $album_id) {
    if(!$request->hasFile('image')) {
        return response()->json(['message' => 'File not found', 'success' => false], 400);
    }

    $file = $request->file('image');
    if(!$file->isValid()) {
        return response()->json(['message' => "Invalid file upload.", "success" => false], 400);
    }

    $album = Album::where('id', $album_id)->first();
    //\Storage::disk('frontend')->allFiles($this->folder_name);

    $file->store("$album->folder_name", ["disk"=>"frontend"]);
    //$file->move($path, $file->getClientOriginalName());

    return response()->json(['message'=>"Upload successful.", "success" => true], 200);
}

我做错了什么?为了明确起见,我不想增加上传大小/php大小限制,我只想截获错误消息并返回一个优雅的错误。

尝试更新php.ini(你可以放入任何你喜欢的大小)

如果您正在使用homestead,请尝试更新nginx(

/etc/nginx/nginx.conf

然后重新启动

sudo service nginx restart
解决方案:


毕竟,我不得不乱搞我的
php.ini
设置,但只有设置
display\u startup\u errors=Off
才能摆脱恼人的警告,然后将
\PostTooLargeException
中的
\php
更改为
\lighting\Http\Exceptions\PostTooLargeException
才能正确捕获异常并谢谢。但是,正如我在开幕式上所说的,我知道我可以更新极限,但我不想。我认为增加天空的极限是不安全的,它不是解决问题的方法。只要把极限推出来。问题是应该有一个方法来返回一个正确的错误而不是警告和E。mpty response.Ps.实际上这里会有一个分块上传程序,所以理论上这个错误无论如何都不会出现,但“不应该发生”不是保护;)好吧,增加限制并不意味着你不安全,你只需要设置上传文件的最小值。。如果您要处理多个文件上传,我相信您需要特别为nginx执行此步骤。我认为它在代码验证之前从nginx http捕获的错误是有意义的,因为警告来自第0行,但是除了增加限制之外,没有其他方法解决这个问题吗?我的问题是我可以提高限制,比如说100MB。。。但是,如果有人选择了101MB,同样的错误仍然会发生,前端甚至无法正确解析,因为它的json无效。你看到问题了吗?我知道nginx很早就截取了它,但解决实际问题的唯一方法是将限制设置为一些我不打算做的不神圣的数字。你可以在前端验证大小,如果它通过前端,你将在后端验证它。。因此,该文件不会对您造成伤害,因为它尚未上载到您的服务器。当然,如果前端验证未按大小捕获该文件(假设nginx limit和frontend limit都设置为相同),那么服务器仍将返回与上述相同的错误,而不是我自己的验证错误消息?由于文件仍将超过最大post大小。。。因此,我必须再次将其设置为一个非常高的限制,以便他们在理论上可以选择的任何东西都不会超过该限制(以便我可以在任何地方进行我自己的验证)。这是我的问题,我不想设置为999999999 GB,这样我就知道我可以始终依靠自己的验证
max_file_uploads=100
post_max_size=120M
upload_max_filesize=120M
http {
      client_max_body_size 50M;         
}
sudo service nginx restart