浅析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 相关文章推荐
人大复印资料处理程序_补充篇
Oct 09 PHP
PHP 手机归属地查询 api
Feb 08 PHP
PHP is_subclass_of函数的一个BUG和解决方法
Jun 01 PHP
PHP基本语法总结
Sep 06 PHP
php站内搜索关键词变亮的实现方法
Dec 30 PHP
PHP的几个常用加密函数
Feb 03 PHP
php中关于长度计算容易混淆的问题分析
May 27 PHP
thinkPHP2.1自定义标签库的导入方法详解
Jul 20 PHP
PHPStudy下如何为Apache安装SSL证书的方法步骤
Jan 23 PHP
PHP getNamespaces()函数讲解
Feb 03 PHP
PHP DB 数据库连接类定义与用法示例
Mar 11 PHP
php使用filter_var函数判断邮箱,url,ip格式示例
Jul 06 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
对text数据类型不支持代码页转换 从: 1252 到: 936
2011/04/23 PHP
php多用户读写文件冲突的解决办法
2013/11/06 PHP
php使用include 和require引入文件的区别
2017/02/16 PHP
基于jquery完美拖拽,可返回拖动轨迹
2012/03/29 Javascript
jquery和javascript的区别(常用方法比较)
2013/07/04 Javascript
网页前端优化之滚动延时加载图片示例
2013/07/13 Javascript
JavaScript的继承的封装介绍
2013/10/15 Javascript
EasyUI实现二级页面的内容勾选的方法
2015/03/01 Javascript
浅谈jQuery中的事件
2015/03/23 Javascript
jquery实现兼容IE8的异步上传文件
2015/06/15 Javascript
jQuery zclip插件实现跨浏览器复制功能
2015/11/02 Javascript
浅析JS异步加载进度条
2016/05/05 Javascript
javaScript事件机制兼容【详细整理】
2016/07/23 Javascript
详解JavaScript时间处理之几个月前或几个月后的指定日期
2016/12/21 Javascript
基于Vue中点击组件外关闭组件的实现方法
2018/03/06 Javascript
JavaScript生成指定范围的时间列表
2018/03/19 Javascript
JavaScript设计模式之观察者模式实例详解
2019/01/16 Javascript
redux处理异步action解决方案
2020/03/22 Javascript
python动态加载变量示例分享
2014/02/17 Python
在Python中使用gRPC的方法示例
2018/08/08 Python
Matplotlib使用Cursor实现UI定位的示例代码
2020/03/12 Python
Python利用Xpath选择器爬取京东网商品信息
2020/06/01 Python
VIVOBAREFOOT赤脚鞋:让您的脚做自然的事情
2017/06/01 全球购物
js正则匹配markdown里的图片标签的实现
2021/03/24 Javascript
公司领导推荐信
2013/11/12 职场文书
财务主管岗位职责
2014/02/28 职场文书
市场营销专业毕业生求职信
2014/03/26 职场文书
服务理念口号
2014/06/11 职场文书
人大调研汇报材料
2014/08/14 职场文书
食品安全汇报材料
2014/08/18 职场文书
2015年小学生自我评价范文
2015/03/03 职场文书
学术会议领导致辞
2015/07/29 职场文书
公安干警正风肃纪心得体会
2016/01/15 职场文书
关于社会实践的心得体会(2016最新版)
2016/01/25 职场文书
python正则表达式re.search()的基本使用教程
2021/05/21 Python
基于Go语言构建RESTful API服务
2021/07/25 Golang