浅析PHP 中move_uploaded_file 上传中文文件名失败


Posted in PHP onApril 17, 2019

项目需要上传文件名保持不变,发现上传中文失败:错误如下:

move_uploaded_file(public/upload/files/2019/04-17/\开密二次开发.rar): failed to open stream: Invalid argument

失败的原因大致猜到是编码问题.保存文件时,需要将中文由utf8转为gb2312。

<?php
$files = $_FILES['attachment']; // 上传的表单附件名
$name = iconv("UTF-8", "gb2312", $files['name']);
move_uploaded_file($files['tmp_name'], "/upload/$name");

 额外补充:如果大家使用Tp5 上传,文件在think/File.php.大概是374行:大多数解决办法是在下面的方法转码,但会存在问题,转码后,文件是上传成功,随后就报错:

elseif (!move_uploaded_file($this->filename, iconv('utf-8','gb2312',$filename))) {
   $this->error = 'upload write error';
   return false;
  }

会抛出异常:

SplFileobject::__construct(/upload\files\2019\04-16\资源.rar): failed to open stream: No such file or directory

解决:

上传中文乱码,使用iconv转码的,不应该在move_uploaded_file()中转码,应该在file类 buildSaveName()方法中大概422行中转码:

最后一段:

 return iconv('utf-8','gb2312',$savename);

那么如果大家是ajax上传,记得在返回的时候转成utf8返回,比如返回的中文乱码,ajax解析报错:

比如以Tp5.0是这样:

$return_data['url'] = '/'.UPLOAD_PATH.$new_path.iconv('gb2312','utf-8',$info->getSaveName());
$this->ajaxReturn($return_data);

总结

以上所述是小编给大家介绍的PHP 中move_uploaded_file 上传中文文件名失败 ,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

PHP 相关文章推荐
php中$_SERVER[PHP_SELF] 和 $_SERVER[SCRIPT_NAME]之间的区别
Sep 05 PHP
php 从数据库提取二进制图片的处理代码
Sep 09 PHP
php+javascript的日历控件
Nov 19 PHP
PHP图片处理之使用imagecopyresampled函数实现图片缩放例子
Nov 19 PHP
php实现改变图片直接打开为下载的方法
Apr 14 PHP
PHP传值到不同页面的三种常见方式及php和html之间传值问题
Nov 19 PHP
yii实现model添加默认值的方法(2种方法)
Jan 06 PHP
Yii CFileCache 获取不到值的原因分析
Feb 08 PHP
php防止表单重复提交实例讲解
Feb 11 PHP
php中isset与empty函数的困惑与用法分析
Jul 05 PHP
laravel框架模型和数据库基础操作实例详解
Jan 25 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
Feb 16 PHP
Laravel框架集成UEditor编辑器的方法图文与实例详解
Apr 17 #PHP
Laravel5框架自定义错误页面配置操作示例
Apr 17 #PHP
JS(jQuery)实现聊天接收到消息语言自动提醒功能详解【提示“您有新的消息请注意查收”】
Apr 16 #PHP
CI框架教程之优化验证码机制详解【验证码辅助函数】
Apr 16 #PHP
Laravel中9个不经常用的小技巧汇总
Apr 16 #PHP
Laravel框架自定义公共函数的引入操作示例
Apr 16 #PHP
Laravel框架文件上传功能实现方法示例
Apr 16 #PHP
You might like
基于Windows下Apache PHP5.3.1安装教程
2010/01/08 PHP
php中对2个数组相加的函数
2011/06/24 PHP
php结合正则批量抓取网页中邮箱地址
2015/05/19 PHP
php中通用的excel导出方法实例
2017/12/30 PHP
showModelessDialog()使用详解
2006/09/07 Javascript
利用JQuery的load函数动态加载其它页面的内容的实现代码
2010/12/14 Javascript
jQuery实现html表格动态添加新行的方法
2015/05/28 Javascript
javascript实现3D变换的立体圆圈实例
2015/08/06 Javascript
详解iframe与frame的区别
2016/01/13 Javascript
jQuery实现手机自定义弹出输入框
2016/06/13 Javascript
jQuery EasyUI中的日期控件DateBox修改方法
2016/11/09 Javascript
JS比较两个数值的大小实例
2016/11/25 Javascript
浅谈ES6新增的数组方法和对象
2017/08/08 Javascript
基于js Canvas实现二次贝塞尔曲线
2018/12/25 Javascript
浅谈layer的Icon样式以及一些常用的layer窗口使用方法
2019/09/11 Javascript
关于vue的列表图片选中打钩操作
2020/09/09 Javascript
python定时器使用示例分享
2014/02/16 Python
Python单链表的简单实现方法
2014/09/23 Python
Python实现自定义顺序、排列写入数据到Excel的方法
2018/04/23 Python
python开启摄像头以及深度学习实现目标检测方法
2018/08/03 Python
python清除字符串前后空格函数的方法
2018/10/21 Python
Pycharm+Python工程,引用子模块的实现
2020/03/09 Python
解决Python 函数声明先后顺序出现的问题
2020/09/02 Python
matplotlib常见函数之plt.rcParams、matshow的使用(坐标轴设置)
2021/01/05 Python
Python入门基础之数字字符串与列表
2021/02/01 Python
Book Depository美国:全球领先的专业网上书店之一
2019/08/14 全球购物
大学校园活动策划书
2014/02/04 职场文书
清明节网上祭英烈活动总结
2014/04/30 职场文书
企业优秀员工事迹材料
2014/05/28 职场文书
工作求职自荐信
2014/06/13 职场文书
信息与工商管理职业规划范文:为梦想而搏击
2014/09/11 职场文书
幼儿园推普周活动总结
2015/05/07 职场文书
副校长2015年教育教学工作总结
2015/07/27 职场文书
岗位聘任协议书
2015/09/21 职场文书
中小学教师继续教育心得体会
2016/01/19 职场文书
Javascript webpack动态import
2022/04/19 Javascript