Laravel自定义验证不生效?文件上传超出PHP限制问题求助
解决Docker环境下Laravel API文件上传的PHP限制问题
你遇到的警告是PHP的post_max_size和upload_max_filesize默认限制(8MB)导致的——PHP在Laravel处理请求前就拦截了超大文件,所以你的自定义验证根本没机会触发。需要先调整PHP配置,再确保Laravel验证规则正确。
一、调整Docker中的PHP配置
根据你的Docker使用方式选择对应方案:
1. 自定义Dockerfile场景
在项目的Dockerfile中添加以下命令,修改PHP上传相关配置(这里设为10MB,需大于你要验证的5MB):
# 创建自定义PHP配置文件 RUN echo "upload_max_filesize = 10M" >> /usr/local/etc/php/conf.d/uploads.ini RUN echo "post_max_size = 10M" >> /usr/local/etc/php/conf.d/uploads.ini RUN echo "memory_limit = 128M" >> /usr/local/etc/php/conf.d/uploads.ini
执行命令重新构建镜像并重启容器:
docker-compose build docker-compose up -d
2. Laravel Sail场景
在项目根目录的.env文件中添加或修改以下配置:
SAIL_PHP_UPLOAD_MAX_FILESIZE=10M SAIL_PHP_POST_MAX_SIZE=10M
重启Sail容器:
sail down && sail up -d
3. 临时修改运行中的容器(仅测试用,重启失效)
先进入容器:
docker exec -it <你的PHP容器名/ID> bash
查看PHP加载的配置文件路径:
php --ini
编辑对应conf.d目录下的配置文件(比如/usr/local/etc/php/conf.d/uploads.ini),添加以下内容:
upload_max_filesize = 10M post_max_size = 10M memory_limit = 128M
保存后退出容器,重启容器生效:
docker restart <你的PHP容器名/ID>
二、配置Laravel自定义验证规则
确保你的验证逻辑能正确触发自定义提示,示例如下:
单个文件上传验证
$request->validate([ 'file' => 'required|file|max:5120', // 5MB = 5*1024KB = 5120KB ], [ 'file.max' => '上传的文件大小不能超过5MB', ]);
多文件上传验证
$request->validate([ 'files.*' => 'required|file|max:5120', ], [ 'files.*.max' => '每个文件大小不能超过5MB', ]);
注意:Postman中要选择form-data类型提交请求,确保文件字段名和验证规则中的键名一致。
内容的提问来源于stack exchange,提问作者Bhabishya Portfilio
相关产品推荐
相关产品推荐

