我的网站托管在共享服务器上。最大上传限制为5MB。如果上传的文件小于5MB,则所有验证和文件上传都可以正常工作。但是当上传大于5MB的文件时,我会看到这一点 。 如何从服务器验证或强制文件处于上载限制之下?
答案 0 :(得分:7)
您似乎对更改PHP限制以允许更大的文件感兴趣。在我看来,你希望你的最大上传量为5MB,如果超过该值,则返回正确的响应。
您可以在FileException
处理异常处理程序中的app/Exceptions/Handler.php
异常。更新render
方法以添加您需要的代码。例如,如果您想要返回验证异常,则需要在FileException
异常的异常处理程序中处理验证。
public function render($request, Exception $exception)
{
if ($exception instanceof \Symfony\Component\HttpFoundation\File\Exception\FileException) {
// create a validator and validate to throw a new ValidationException
return Validator::make($request->all(), [
'your_file_input' => 'required|file|size:5000',
])->validate();
}
return parent::render($request, $exception);
}
这是未经测试的,但应该给你一般的想法。
你也可以通过javascript进行客户端验证,这样一个太大的文件永远不会真正发送到你的服务器,但javascript可以被客户端禁用或删除,所以拥有不错的服务器端会很好处理设置。
对于客户端验证,如果您将事件处理程序附加到"更改"对于文件输入的事件,您可以使用this.files[0].size
检查文件大小,然后执行任何其他操作(禁用表单,删除上传的文件等)
答案 1 :(得分:5)
$validator = Validator::make($request->all(), [
'file' => 'max:5120', //5MB
]);
控制器中的
和php.ini
upload_max_filesize = 10MB
答案 2 :(得分:5)
post_max_size 和 upload_max_filesize 是您可以设置的指令,用于配置php.ini文件或.htaccess文件或httpd.conf文件。
php.ini示例:
post_max_size=15M
upload_max_filesize=15M
.htaccess示例:
php_value post_max_size=15M
php_value upload_max_filesize=15M
httpd.conf示例:
<VirtualHost *:80>
ServerName www.example.com
ServerAlias example.com
DocumentRoot /var/www/html/example/
ErrorLog /var/log/httpd/error.log
<Directory /var/www/html/example/>
AllowOverride None
<IfModule mod_php5.c>
php_value post_max_size=15M
php_value upload_max_filesize=15M
</IfModule>
</Directory>
</VirtualHost>
答案 3 :(得分:2)
您可以使用Laravel验证规则:
'image_file_input_name' => 'required|mimes:jpeg,bmp,png|size:5000',
尺寸:值
验证字段的大小必须与给定值匹配。 对于字符串数据,该值对应于字符数。对于 数值数据,该值对应于给定的整数值。为 array,size对应于数组的计数。对于文件,大小 对应于以千字节为单位的文件大小。
答案 4 :(得分:1)
在php.ini中更改以下参数即可!对我来说。
upload_max_filesize = 50M
memory_limit = 512M
max_input_time = -1
max_execution_time = 0
答案 5 :(得分:1)
步骤如下:
打开你的终端[CTL + SHIFT t]
运行以下命令:
$ php -i | grep php.i
上面的命令将打印您的服务器正在使用的 php.ini 文件的路径,在我的情况下,我得到了:
Configuration File (php.ini) Path => /etc/php/7.2/cli
加载的配置文件 => /etc/php/7.2/cli/php.ini
在此之前,您可能一直在编辑 /etc/php/7.2/apache2/php.ini 认为可以解决问题,但不,它没有! ?
现在运行:$ sudo nano /etc/php/7.2/cli/php.ini
我们关心的是 post_max_size
、upload_max_filesize
和 memory_limit
的值,它们的默认值为 8M
、2M
和 {{1} } 分别。现在你明白为什么不能上传超过 2MB 大小的文件了?。
接下来,搜索这些变量并更改它们的值以满足您的需要。这样做时,请确保大小遵循与默认值相同的比率,即 128M
应该更大,然后是 memory_limit
,然后是 post_max_size
。例如,就我而言,我使用了以下值:
upload_max_filesize
完成更改值以满足您的需要后,使用 CTL X 保存更改然后键入 Y 并按 ENTER。
接下来,重启apache:post_max_size = 6G
upload_max_filesize = 4G
memory_limit = 8G
注意 - 如果正在运行 nginx,这适用于 apache 服务器 然后
$ sudo /etc/init.d/apache2 restart
编辑上述值
brew services restart php@7.2 [用你使用的php版本替换7.2] 这就对了!现在,您可以在上面指定的值范围内上传大文件,而不会遇到任何麻烦?。
答案 6 :(得分:0)
5 MB限制由您的虚拟主机设置,可能无法更改。
要上传大于限制的文件,您必须将其部分上传。
这样做的laravel包:https://github.com/jildertmiedema/laravel-plupload
答案 7 :(得分:0)
您可以通过最大验证程序
来检查文件的大小 self.html_file.write(response.body.decode("utf-8"))
答案 8 :(得分:0)
在laravel中你可以像这样验证 -
$validator = Validator::make($request->all(), [
'file' => 'max:5120',
]);
该值以千字节为单位。即最大值:10240 =最大10 MB。 并在jquery -
绑定到输入字段的onchange事件
$('#upFile').bind('change', function() {
//this.files[0].size gets the size of your file and then you can validate accourdingly...
alert(this.files[0].size);
});
希望这会对你有所帮助。
答案 9 :(得分:0)
您可以使用jQuery / javascript执行此操作(这意味着该文件不会上传,但您可以在将文件发送到PHP脚本之前检查该文件)
$('#myFile').bind('change', function() {
let filesize = this.files[0].size // On older browsers this can return NULL.
let filesizeMB = (filesize / (1024*1024)).toFixed(2);
if(filesizeMB <= 5) {
// Allow the form to be submitted here.
} else {
// Don't allow submission of the form here.
}
});
但总是要进行服务器端验证。如果你搬到一个更强大的网站,仍然希望你的网站没有任何怪癖。
$validator = Validator::make($request->all(), [
'file' => 'max:5120', //5MB
]);
所有这些都是未经测试的,但应该有用。