【发布时间】:2020-01-18 01:29:50
【问题描述】:
尝试将图像上传到 laravel 存储时出现错误。
SplFileInfo::getSize(): C:\xampp\tmp\php3624.tmp 的统计失败
但我什至没有使用 SplFileInfo 函数。 这是我的代码。
public function store(Request $request)
{
$this->validate($request, [
'title' => 'required|max:191',
'sub_title' => 'required|max:191',
'description' => 'required',
'active' => 'required',
'img' => 'image|mimes:jpg,png,svg,gif,jpeg|max:2048'
]);
$services = new Services;
if($request->hasFile('img')){
$imageName = time().'_NEWS.'.$request->file('img')->getClientOriginalExtension();
// dd($request->file('img')->getMaxFilesize());
$services->news_image = $imageName;
$request->file('img')->move(public_path('storage/services/'), $imageName);
}
$services->title = $request->input('title');
$services->sub_title = $request->input('sub_title');
$services->description = $request->input('description');
$services->active = $request->input('ative');
$services->save();
return redirect('/admin/services')->with('success', 'Succesvol een behandeling aangemaakt');
}
我希望有人可以在这里帮助我。我已经知道它是一个 Symfony 错误,但我找不到任何问题的答案。我已经改变了我的
post_max_size=40M 和 upload_max_filesize=40M
在 PHP.ini 中,这不会是问题。
【问题讨论】:
-
在你的代码的哪一行触发了错误/异常?
-
您正在间接使用 SplFileInfo。 Laravel 使用 Symfony 的 HttpFoundation 组件,当你使用
$request->file('img')时,你会得到一个 UploadedFile,它扩展了 File,然后又扩展了 \SplFileInfo。错误消息提示上传文件的大小存在问题。您是否检查过 ini 值是否在某处被覆盖?也许在你的控制器中使用ini_get('upload_max_filesize')来确保 -
@dbrumann,我使用了命令
dd(ini_get('upload_max_filesize'));,它给了我 40M,因为它没有自我覆盖。 -
@Jakumi,错误是在
$imageName = time().'_NEWS.'.$request->file('img')->getClientOriginalExtension();上触发的,所以大括号内的第一行。 -
所以本质上,应该存在的文件不存在(不再存在)或不可访问(-> stat 失败)。 php 存在一个长期存在的问题,需要在表单元素上设置 enctype(请检查您的表单是否有):php.net/manual/en/features.file-upload.post-method.php(据我所知,max_file_size 是可选的,但您可以只添加它为了安全起见)。否则:laravel(重新)是否有可能以某种方式自行移动文件?
标签: php symfony file-upload laravel-6