浅析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面向对象的使用教程 简单数据库连接
Nov 25 PHP
MySQL数据库转移,access,sql server 转 MySQL 的图文教程
Sep 02 PHP
PHP parse_url 一个好用的函数
Oct 03 PHP
phpmyadmin里面导入sql语句格式的大量数据的方法
Jun 05 PHP
php垃圾代码优化操作代码
Aug 05 PHP
php 地区分类排序算法
Jul 01 PHP
php中过滤非法字符的具体实现
Oct 29 PHP
php 使用file_get_contents读取大文件的方法
Nov 13 PHP
php魔术函数__call()用法实例分析
Feb 13 PHP
PHP 年月日的三级联动实例代码
May 24 PHP
基于 Swoole 的微信扫码登录功能实现代码
Jan 15 PHP
php中字符串和整数比较的操作方法
Jun 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
MYSQL数据库初学者使用指南
2006/11/16 PHP
介绍几个array库的新函数 php
2006/12/29 PHP
PHP 程序员应该使用的10个组件
2009/10/31 PHP
php中3种方法统计字符串中每种字符的个数并排序
2012/08/27 PHP
用roll.js实现的图片自动滚动+鼠标触动的特效
2007/03/18 Javascript
jquery $.ajax相关用法分享
2012/03/16 Javascript
Event altKey,ctrlKey,shiftKey属性解析
2013/12/18 Javascript
node.js中的fs.chown方法使用说明
2014/12/16 Javascript
js表格排序实例分析(支持int,float,date,string四种数据类型)
2015/05/06 Javascript
Bootstrap每天必学之媒体对象
2015/11/30 Javascript
javascript运动框架用法实例分析(实现放大与缩小效果)
2016/01/08 Javascript
js拼接html字符串的注意事项
2016/10/13 Javascript
AngularJS实践之使用ng-repeat中$index的注意点
2016/12/22 Javascript
js阻止移动端页面滚动的两种方法
2017/01/25 Javascript
js禁止表单重复提交
2017/08/29 Javascript
浅谈Vue.js 组件中的v-on绑定自定义事件理解
2017/11/17 Javascript
关于echarts在节点显示动态数据及添加提示文本所遇到的问题
2018/04/20 Javascript
Vue常用的几个指令附完整案例
2018/11/06 Javascript
微信小程序获取用户信息的两种方法wx.getUserInfo与open-data实例分析
2019/05/03 Javascript
js实现树形数据转成扁平数据的方法示例
2020/02/27 Javascript
[57:37]EG vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python字典序问题实例
2014/09/26 Python
浅谈Django的缓存机制
2018/08/23 Python
Python基于Twilio及腾讯云实现国际国内短信接口
2020/06/18 Python
python+opencv实现车道线检测
2021/02/19 Python
英国最大的宠物食品和宠物用品网上零售商: Zooplus
2016/08/01 全球购物
Rakuten Kobo台湾:电子书、eReaders和Reading应用程式
2017/11/24 全球购物
拉飞逸官网:Lafayette 148 New York
2020/07/15 全球购物
亿阳信通股份有限公司C#笔试题
2016/12/06 面试题
Java中各种基本数据类型的默认值都是什么
2016/12/22 面试题
英语专业学子个人的自我评价
2013/10/02 职场文书
药品质量检测应届生求职信
2013/11/14 职场文书
护理毕业生自荐信范文
2013/12/22 职场文书
销售主管的自我评价分享
2014/01/03 职场文书
对教师的评语
2014/04/28 职场文书
2015入党自传书范文
2015/06/26 职场文书