浅析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脚本的10个技巧(2)
Oct 09 PHP
PHP之变量、常量学习笔记
Mar 27 PHP
第4章 数据处理-php字符串的处理-郑阿奇(续)
Jul 04 PHP
如何突破PHP程序员的技术瓶颈分析
Jul 17 PHP
微信营销平台系统?刮刮乐的开发
Jun 10 PHP
ThinkPHP中的关联模型注意点
Jun 16 PHP
PHP 双链表(SplDoublyLinkedList)简介和使用实例
May 12 PHP
PHP实现的简单网络硬盘
Jul 29 PHP
PHP获取昨天、今天及明天日期的方法
Feb 03 PHP
Laravel中Facade的加载过程与原理详解
Sep 22 PHP
php如何比较两个浮点数是否相等详解
Feb 12 PHP
PHP实现两种排课方式
Jun 26 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
PHP数组的交集array_intersect(),array_intersect_assoc(),array_inter_key()函数的小问题
2011/05/29 PHP
PHP两种去掉数组重复值的方法比较
2014/06/19 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
2020/01/22 PHP
如何实现JS函数的重载
2006/09/22 Javascript
JavaScript 学习小结(适合新手参考)
2009/07/30 Javascript
一些javascript一些题目的解析
2010/12/25 Javascript
Backbone.js框架中Model与Collection的使用实例
2016/05/07 Javascript
Vue网页html转换PDF(最低兼容ie10)的思路详解
2017/08/24 Javascript
详解react-redux插件入门
2018/04/19 Javascript
vue 移动端适配方案详解
2018/11/15 Javascript
js核心基础之构造函数constructor用法实例分析
2019/05/11 Javascript
微信小程序云开发之使用云存储
2019/05/17 Javascript
微信小程序国际化探索实现(附源码地址)
2020/05/20 Javascript
[02:32]【DOTA2亚洲邀请赛】iceice,梦开始的地方
2017/03/13 DOTA
[57:55]EG vs Fnatic 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
在 Django/Flask 开发服务器上使用 HTTPS
2014/07/03 Python
Python实现单词拼写检查
2015/04/25 Python
Python中输出ASCII大文字、艺术字、字符字小技巧
2015/04/28 Python
Django框架中的对象列表视图使用示例
2015/07/21 Python
实例探究Python以并发方式编写高性能端口扫描器的方法
2016/06/14 Python
Python机器学习之SVM支持向量机
2017/12/27 Python
python selenium 对浏览器标签页进行关闭和切换的方法
2018/05/21 Python
使用python对excle和json互相转换的示例
2018/10/23 Python
Python字符串的全排列算法实例详解
2019/01/07 Python
python opencv 批量改变图片的尺寸大小的方法
2019/06/28 Python
Pycharm中出现ImportError:DLL load failed:找不到指定模块的解决方法
2019/09/17 Python
安装2019Pycharm最新版本的教程详解
2019/10/22 Python
Python性能分析工具Profile使用实例
2019/11/19 Python
使用Html5 Stream开发实时监控系统
2020/06/02 HTML / CSS
美国沃尔玛网上超市:Walmart
2020/08/14 全球购物
四种会话跟踪技术
2015/05/20 面试题
企业办公室岗位职责
2014/03/12 职场文书
求职意向书范文
2014/04/01 职场文书
2015毕业寄语大全
2015/02/26 职场文书
教师师德表现自我评价
2015/03/05 职场文书
入党申请书怎么写?
2019/06/21 职场文书