浅析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+java实现自动新闻滚动窗口
Oct 09 PHP
jQuery 源码分析笔记
May 25 PHP
php设置编码格式的方法
Mar 05 PHP
php自动加载机制的深入分析
Jun 08 PHP
phpQuery占用内存过多的处理方法
Nov 13 PHP
解决CodeIgniter伪静态失效
Jun 09 PHP
浅谈PHP正则表达式中修饰符/i, /is, /s, /isU
Oct 21 PHP
PHP清除字符串中所有无用标签的方法
Dec 01 PHP
Yii实现显示静态页的方法
Apr 25 PHP
php输出含有“#”字符串的方法
Jan 18 PHP
php简单实现单态设计模式的方法分析
Jul 28 PHP
修改yii2.0用户登录使用的user表为其它的表实现方法(推荐)
Aug 01 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 date与gmdate的获取日期的区别
2010/02/08 PHP
php Calender(日历)代码分享
2014/01/03 PHP
PHP使用SMTP邮件服务器发送邮件示例
2018/08/28 PHP
一些技巧性实用js代码小结
2009/10/14 Javascript
再谈ie和firefox下的document.all属性
2009/10/21 Javascript
用js小类库获取浏览器的高度和宽度信息
2012/01/15 Javascript
关于页面嵌入swf覆盖div层的问题的解决方法
2014/02/11 Javascript
nodejs教程之异步I/O
2014/11/21 NodeJs
NodeJS中Buffer模块详解
2015/01/07 NodeJs
JavaScript精炼之构造函数 Constructor及Constructor属性详解
2015/11/05 Javascript
微信JS-SDK自定义分享功能实例详解【分享给朋友/分享到朋友圈】
2016/11/25 Javascript
javascript实现秒表计时器的制作方法
2017/02/16 Javascript
JavaScript限制在客户区可见范围的拖拽(解决scrollLeft和scrollTop的问题)(2)
2017/05/17 Javascript
JavaScript Event Loop相关原理解析
2020/06/10 Javascript
在antd Form表单中select设置初始值操作
2020/11/02 Javascript
python字符串替换的2种方法
2014/11/30 Python
浅谈Python浅拷贝、深拷贝及引用机制
2016/12/15 Python
python基本语法练习实例
2017/09/19 Python
Python3 读、写Excel文件的操作方法
2018/10/20 Python
使用Python做垃圾分类的原理及实例代码附源码
2019/07/02 Python
Python 实现取多维数组第n维的前几位
2019/11/26 Python
Python基于pygame实现单机版五子棋对战
2019/12/26 Python
python简单利用字典破解zip文件口令
2020/09/07 Python
校园活动策划书范文
2014/01/10 职场文书
小学师德标兵先进事迹材料
2014/05/25 职场文书
模具设计与制造专业求职信
2014/07/19 职场文书
高中生期中考试失利检讨书
2014/10/23 职场文书
党的群众路线教育实践活动整改落实情况自查报告
2014/10/28 职场文书
2014年镇党建工作汇报材料
2014/11/02 职场文书
2014个人年度工作总结范文
2014/12/24 职场文书
期末复习计划
2015/01/19 职场文书
警示教育观后感
2015/06/17 职场文书
小学生作文之《压岁钱的烦恼》
2019/09/27 职场文书
导游词之日月潭
2019/11/05 职场文书
Oracle中update和select 关联操作
2022/01/18 Oracle
如何利用python实现Simhash算法
2022/06/28 Python