浅析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文件的实现方法
Mar 19 PHP
PHP simple_html_dom.php+正则 采集文章代码
Dec 24 PHP
理解php Hash函数,增强密码安全
Feb 25 PHP
ThinkPHP与PHPExcel冲突解决方法
Aug 08 PHP
php生成缩略图示例代码分享(使用gd库实现)
Jan 20 PHP
php 获取页面中指定内容的实现类
Jan 23 PHP
php轻松实现文件上传功能
Mar 03 PHP
PHPWind9.0手动屏蔽验证码解决后台关闭验证码但是依然显示的问题
Aug 12 PHP
Linux下 php7安装redis的方法
Nov 01 PHP
在Laravel中使用MongoDB的方法示例
Nov 11 PHP
基于PHP实现解密或加密Cloudflar邮箱保护
Jun 24 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 curl伪造IP地址和header信息代码实例
2015/04/27 PHP
详谈配置phpstorm完美支持Codeigniter(CI)代码自动完成(代码提示)
2017/04/07 PHP
JS 动态加载脚本的4种方法
2009/05/05 Javascript
Jquery实现无刷新DropDownList联动实现代码
2010/03/08 Javascript
javascript各浏览器中option元素的表现差异
2011/04/07 Javascript
加载 Javascript 最佳实践
2011/10/30 Javascript
JS中处理与当前时间间隔的函数代码
2012/05/23 Javascript
10个基于浏览器的JavaScript调试工具分享
2013/02/07 Javascript
Js中setTimeout()和setInterval() 何时被调用执行的用法
2013/04/12 Javascript
Chrome扩展页面动态绑定JS事件提示错误
2014/02/11 Javascript
ie下$.getJSON出现问题的解决方法
2014/02/12 Javascript
12306验证码破解思路分享
2015/03/25 Javascript
利用jQuery中的ajax分页实现代码
2016/02/25 Javascript
基于JS实现密码框(password)中显示文字提示功能代码
2016/05/27 Javascript
jQuery使用DataTable实现删除数据后重新加载功能
2017/02/27 Javascript
webpack配置sass模块的加载的方法
2017/07/30 Javascript
使用JavaScript实现一个小程序之99乘法表
2017/09/21 Javascript
vue组件挂载到全局方法的示例代码
2018/08/02 Javascript
Vue.js实现开发购物车功能的方法详解
2019/02/22 Javascript
[46:09]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS VG第三场
2014/05/26 DOTA
基于Python实现一个简单的银行转账操作
2016/03/06 Python
使用Python 自动生成 Word 文档的教程
2020/02/13 Python
Python基于xlrd模块处理合并单元格
2020/07/28 Python
python实现图书馆抢座(自动预约)功能的示例代码
2020/09/29 Python
HTML5 Canvas渐进填充与透明实现图像的Mask效果
2013/07/11 HTML / CSS
HTML5调用手机发短信和打电话功能
2020/04/29 HTML / CSS
奢华时尚的创新平台:Baltini
2020/10/03 全球购物
Linux文件系统类型
2012/02/15 面试题
如何清空Session
2015/02/23 面试题
如何现实servlet的单线程模式
2014/08/05 面试题
2014村书记党建工作汇报材料
2014/11/02 职场文书
2015年员工试用期工作总结
2014/12/12 职场文书
2015年支教教师工作总结
2015/07/22 职场文书
物业保洁员管理制度
2015/08/05 职场文书
Redis Cluster 字段模糊匹配及删除
2021/05/27 Redis
SQL实现LeetCode(196.删除重复邮箱)
2021/08/07 MySQL