100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Thinkphp5上传中文名的文件报错move_uploaded_file(): failed to open stream: Invalid argument

Thinkphp5上传中文名的文件报错move_uploaded_file(): failed to open stream: Invalid argument

时间:2022-02-21 12:12:35

相关推荐

Thinkphp5上传中文名的文件报错move_uploaded_file(): failed to open stream: Invalid argument

最近要在后台添加上传文件功能,并且保持文件名称不变,上传英文和数字名的文件都是正常的,唯独上传中文名的就失败,报错如下:

解决方案:

网上有些人的教程是直接修改Thinkphp框架的源代码,但这样不是很好,尽量不要去修改框架,以免升级后依然会出错。

正确方法:在move复制文件前,先对文件名进去中文转码,转换成gb2312,复制完成后再转换回utf-8即可

public function upload() {$path = ROOT_PATH . 'public/uploads'. DS;if(!file_exists($path)) {mkdir($path,0777,true);}$file = request()->file("file");if($file) {$filename=$file->getInfo('name');//转换中文编码,从UTF-8转成gb2312$filename=iconv("UTF-8","gb2312",$filename);//限制只能上传30MB$info = $file->validate(['size'=>1024*1024*30,'ext'=>'exe,zip,rar'])->move($path,$filename,true);$data= array();if($info) {//从gb2312转回UTF-8$savename=iconv("gb2312","UTF-8",$info->getSaveName());$data['code'] = 1;$data['msg'] ='上传成功!';$data['data']['src'] = "http://".$_SERVER['HTTP_HOST']."/uploads/".$savename;} else {$data['code'] = 0;$data['msg'] ='上传失败,只能上传exe|zip|rar类型的文件';}return $data;}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。