Laravel Max验证规则异常失效问题咨询
问题解答
你猜的没错,这确实是php.ini的默认2MB上传限制在搞鬼!而且你的思路完全正确——必须先把服务器的上传限制调高到你需要的最大值(比如10MB),框架的验证器才能正常发挥拦截作用,具体原因和解决步骤如下:
为什么验证器没触发?
PHP在处理HTTP请求的早期阶段,会先根据php.ini的配置检查上传文件大小。如果文件超过upload_max_filesize(默认2MB),PHP会直接拒绝接收这个文件,根本不会把文件数据传递到你的框架控制器里。这就导致你设置的验证规则(包括Max规则)完全没有执行的机会,自然不会返回你定义的自定义提示信息。需要调整的关键php.ini参数
你需要修改php.ini中的两个核心参数(修改后记得重启服务器让配置生效):upload_max_filesize = 10M:单个上传文件的最大允许大小post_max_size = 12M:整个POST请求的总大小上限(必须比upload_max_filesize大,因为POST请求除了文件还可能包含其他表单数据)
如果你没有全局
php.ini的修改权限,也可以尝试在项目根目录创建.user.ini文件写入上述配置;Apache/Nginx环境下,还可以在虚拟主机配置里添加对应指令覆盖全局设置。验证器的正确作用时机
当服务器上传限制调整到10MB后,所有≤10MB的文件都会被PHP正常接收并传递到框架中。这时候你设置的验证器Max规则就会生效:比如你要限制文件不超过5MB,那上传5-10MB的文件时,验证器就会触发并返回你定义的自定义提示;而超过10MB的文件还是会被PHP拦截,你可以通过捕获PHP的上传错误来做额外的友好提示处理。
内容的提问来源于stack exchange,提问作者Packy
相关产品推荐
相关产品推荐

