浅析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调用三种数据库的方法(1)
Oct 09 PHP
php 分页类 扩展代码
Jun 11 PHP
MayFish PHP的MVC架构的开发框架
Aug 13 PHP
php 网页游戏开发入门教程一(webgame+design)
Oct 26 PHP
PHP面向对象学习笔记之二 生成对象的设计模式
Oct 06 PHP
PHP实现的博客欢迎提示功能(很特别哦)
Jun 05 PHP
兼容ie6浏览器的php下载文件代码分享
Jul 14 PHP
ThinkPHP表单自动验证实例
Oct 13 PHP
php中使用session防止用户非法登录后台的方法
Jan 27 PHP
thinkphp查询,3.X 5.0方法(亲试可行)
Jun 17 PHP
浅析PHP类的反射来实现依赖注入过程
Feb 06 PHP
PHP 布尔值的自增与自减的实现方法
May 03 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 JSON格式数据交互实例代码详解
2011/01/13 PHP
php实现把数组按指定的个数分隔
2014/02/17 PHP
php微信开发之批量生成带参数的二维码
2016/06/26 PHP
Javascript读取cookie函数代码
2010/10/16 Javascript
jQuery动态添加 input type=file的实现代码
2012/06/14 Javascript
jQuery设置div一直在页面顶部显示的方法
2013/10/24 Javascript
使用Js让Html中特殊字符不被转义
2013/11/05 Javascript
详解页面滚动值scrollTop在FireFox与Chrome浏览器间的兼容问题
2015/12/03 Javascript
JavaScript中三种异步上传文件方式
2016/03/06 Javascript
详解JSON1:使用TSQL查询数据和更新JSON数据
2016/11/21 Javascript
微信小程序 UI布局常用技巧整理总结
2016/12/05 Javascript
微信小程序上滑加载下拉刷新(onscrollLower)分批加载数据(一)
2017/05/11 Javascript
js实现网页的两个input标签内的数值加减(示例代码)
2017/08/15 Javascript
JavaScript 保护变量不被随意修改的实现代码
2017/09/27 Javascript
Vue表单绑定的实例代码(单选按钮,选择框(单选时,多选时,用 v-for 渲染的动态选项)
2019/05/13 Javascript
浅谈django rest jwt vue 跨域问题
2018/10/26 Python
对python 生成拼接xml报文的示例详解
2018/12/28 Python
python实现从本地摄像头和网络摄像头截取图片功能
2019/07/11 Python
python爬虫-模拟微博登录功能
2019/09/12 Python
Pytorch GPU显存充足却显示out of memory的解决方式
2020/01/13 Python
Django模型验证器介绍与源码分析
2020/09/08 Python
python爬虫beautifulsoup解析html方法
2020/12/07 Python
HTML5给汉字加拼音收起展开组件的实现代码
2020/04/08 HTML / CSS
英国Amara家居法国网站:家居装饰,现代装饰和豪华礼品
2016/12/15 全球购物
YSL圣罗兰美妆俄罗斯官网:Yves Saint Lauret RU
2020/09/23 全球购物
类成员函数的重载、覆盖和隐藏区别
2016/01/27 面试题
简述使用ftp进行文件传输时的两种登录方式?它们的区别是什么?常用的ftp文件传输命令是什么?
2016/11/20 面试题
求职简历自荐信
2013/10/20 职场文书
车队司机自我鉴定
2014/03/02 职场文书
美术第二课堂活动总结
2014/07/08 职场文书
委托培训协议书
2014/11/17 职场文书
2014年保育员个人工作总结
2014/12/02 职场文书
淘宝客服专员岗位职责
2015/04/07 职场文书
2015年政治教研组工作总结
2015/07/22 职场文书
奖学金申请个人主要事迹材料
2015/11/04 职场文书
Nginx的gzip相关介绍
2022/05/11 Servers