📜  上传的文件超过 laravel 中的 upload_max_filesize - PHP (1)

📅  最后修改于: 2023-12-03 15:21:28.430000             🧑  作者: Mango

上传的文件超过 Laravel 中的 upload_max_filesize - PHP

当您在使用 Laravel 框架时,可能会遇到上传文件时遇到 "上传的文件超过 Laravel 中的 upload_max_filesize" 的错误提示。这意味着您尝试上传的文件大小超过了您在服务器上允许的最大上传文件大小。

原因

这种错误通常由 PHP 的配置引起,特别是 PHP 配置文件中的 upload_max_filesize 值。这个值规定了 PHP 可以处理的最大文件大小。

解决方案

有几种方法可以解决这个问题。

1. 修改 PHP 配置

在 PHP 配置文件中修改 upload_max_filesize 值。这种方法需要您对服务器具有 root 权限,并且需要编辑 PHP 配置文件。具体操作可能因为您所使用的操作系统而有所不同。

Linux

如果您使用的是 Linux 操作系统,则可以编辑 php.ini 或 php-fpm/php-cgi 的配置文件,并将 upload_max_filesize 值设置为所需大小。例如,在 Ubuntu 上,您可以运行以下命令编辑 php.ini:

sudo nano /etc/php/7.4/apache2/php.ini

然后找到以下行:

; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize = 2M

将它修改为所需值:

upload_max_filesize = 20M

最后保存并退出即可。

Windows

如果您使用 Windows 操作系统,则可以通过以下方式找到并编辑 php.ini 文件:

  1. 在文件夹选项中,将隐藏扩展名启用。
  2. 打开 C:\Program Files (x86)\PHP\php.ini
  3. upload_max_filesize 的值修改为所需大小,如 upload_max_filesize=20M
2. 使用 .htaccess 文件

将以下行添加到您的 .htaccess 文件中,以允许上传更大的文件:

php_value upload_max_filesize 20M
php_value post_max_size 20M

请注意,这种方法仅适用于 Apache Web 服务器。

3. 使用 Laravel 扩展包

Laravel 提供了一些扩展包,可以让您更轻松地控制上传文件的大小。这里介绍两个常用扩展包:

laravel/collective

如果您使用 laravel/collective 扩展包,则可以使用 HTML 表单生成器上传文件,并添加 maxFileSize 属性来控制文件大小。例如:

{!! Form::open(['url' => $url, 'method' => 'post', 'files' => true]) !!}
    {!! Form::file('file', ['maxFileSize' => 5]) !!}
{!! Form::close() !!}

这将控制上传文件的大小,并在超出限制时阻止上传。

anlutro/l4smart-errors

如果您使用 anlutro/l4smart-errors 扩展包,则可以捕获上传文件大小超过限制的异常,并将其呈现给用户。以下是使用它的示例:

public function postUpload()
{
    try {
        // attempt to upload file here
    } catch (anlutro\LaravelSmartErrors\Form\ValidationException $e) {
        // handle validation errors
    } catch (anlutro\LaravelSmartErrors\HttpException $e) {
        if ($e->getStatusCode() == 413) {
            // handle file too large error
        }
    }
}

如果您的上传文件大小超过限制,则异常处理程序将捕获它,并将 413 状态码返回给客户端。

结论

上传文件超过 Laravel 中 upload_max_filesize 值是常见的问题,但有很多种不同的解决方法,可以让您在不需要过多代码调整的情况下解决这个问题。根据您的具体情况,请选择最适合您的解决方法。