PHP上传大文件触发Call to a member function getSize() on null错误求助
问题原因与解决方案
Call to a member function getSize() on null报错的核心是执行$file = $this->request->getFile('imagefile')时没有获取到有效文件对象,大文件上传触发了服务端的上传大小限制,导致文件没有被正常接收,所以$file为null,调用方法直接报错。
第一步:修复代码健壮性
先补充文件对象存在性校验,避免空调用报错,修正后的代码如下:
$title = $this->request->getPost('title'); $kategori = $this->request->getPost('kategori'); $seo = str_replace(" ", "-", strtolower($kategori)); $deskripsi = $this->request->getPost('deskripsi'); // 先初始化基础数据 $data = [ 'title' => $title, 'kategori' => $kategori, 'seo' => $seo, 'deskripsi' => $deskripsi ]; $file = $this->request->getFile('imagefile'); // 先判断文件对象存在、上传合法再处理 if ($file && $file->isValid() && $file->getSize() > 0) { $image = $file->getRandomName(); $file->move('./uploads/peta/', $image); $data['file'] = $image; }
第二步:调整服务端上传限制
小文件上传正常、大文件报错基本都是服务端参数限制导致,需要同步调整以下配置:
PHP配置修改
找到php.ini配置文件,调整对应参数(示例为最大支持100M文件上传,可按需修改数值):upload_max_filesize = 100M:单个文件最大上传大小post_max_size = 120M:POST请求总大小,需要大于upload_max_filesize,预留其他表单字段的大小空间max_execution_time = 300:脚本最大执行时间,大文件上传需要更长的执行时长max_input_time = 300:请求接收数据的最大时长
修改完成后重启PHP服务生效。
Web服务器配置修改
- 若使用Nginx:在nginx配置对应的http块、server块或站点location块中添加参数
client_max_body_size 120M;,修改后重启Nginx生效。 - 若使用Apache:在httpd.conf或站点.htaccess文件中添加参数
LimitRequestBody 125829120(单位为字节,120M对应数值为12010241024=125829120),修改后重启Apache生效。
- 若使用Nginx:在nginx配置对应的http块、server块或站点location块中添加参数
如果使用的框架有单独的上传大小限制配置,也需要同步调整对应参数。
内容的提问来源于stack exchange,提问作者Handikater
相关产品推荐
相关产品推荐

