浅析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中日期加减法运算实现代码
Dec 08 PHP
ie与session丢失(新窗口cookie丢失)实测及解决方案
Jul 15 PHP
php sybase_fetch_array使用方法
Apr 15 PHP
浅析PHP中strlen和mb_strlen的区别
Aug 31 PHP
Laravel框架数据库CURD操作、连贯操作总结
Sep 03 PHP
php实现用手机关闭计算机(电脑)的方法
Apr 22 PHP
php while循环控制的简单实例
May 30 PHP
PHP自定义函数获取URL中一级域名的方法
Aug 23 PHP
PHP使用FFmpeg获取视频播放总时长与码率等信息
Sep 13 PHP
php对xml文件的增删改查操作实现方法分析
May 19 PHP
Laravel如何自定义command命令浅析
Mar 23 PHP
php7 图形用户界面GUI 开发示例
Feb 22 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
手冲咖啡应该是现代精品咖啡店的必备选项吗?
2021/03/03 冲泡冲煮
Yii中使用PHPExcel导出Excel的方法
2014/12/26 PHP
Yii中Model(模型)的创建及使用方法
2015/12/28 PHP
PHP单元测试配置与使用方法详解
2019/12/27 PHP
laravel使用数据库测试注意事项
2020/04/10 PHP
javascript在事件监听方面的兼容性小结
2010/04/07 Javascript
jquery实现不同大小浏览器使用不同的css样式表的方法
2014/04/02 Javascript
js文件包含的几种方式介绍
2014/09/28 Javascript
详解JavaScript中常用的函数类型
2015/11/18 Javascript
通过sails和阿里大于实现短信验证
2017/01/04 Javascript
JavaScript中捕获与冒泡详解及实例
2017/02/03 Javascript
JS对象创建的几种方式整理
2017/02/28 Javascript
JavaScript初学者必看“new”
2017/06/12 Javascript
vue实现的上传图片到数据库并显示到页面功能示例
2018/03/17 Javascript
Vue 应用中结合vux使用微信 jssdk的方法
2018/08/28 Javascript
微信小程序如何调用json数据接口并解析
2019/06/29 Javascript
vue实现页面滚动到底部刷新
2019/08/16 Javascript
[05:17]DOTA2誓师:今天我们在这里 明天TI4等我!
2014/03/26 DOTA
python实现数据图表
2017/07/29 Python
numpy排序与集合运算用法示例
2017/12/15 Python
python使用生成器实现可迭代对象
2018/03/20 Python
Python中使用遍历在列表中添加字典遇到的坑
2019/02/27 Python
python中aioysql(异步操作MySQL)的方法
2019/04/11 Python
python实现nao机器人手臂动作控制
2019/04/29 Python
pandas-resample按时间聚合实例
2019/12/27 Python
python实现三种随机请求头方式
2021/01/05 Python
CSS3利用text-shadow属性实现多种效果的文字样式展现方法
2016/08/25 HTML / CSS
AmazeUI 输入框组的示例代码
2020/08/14 HTML / CSS
联想中国官方商城:Lenovo China
2017/10/18 全球购物
俄罗斯的精英皮具:Wittchen
2018/01/29 全球购物
澳大利亚婴儿、幼儿和儿童在线设计师商店:Smooch Baby
2019/02/16 全球购物
国家助学金获奖感言
2014/01/31 职场文书
《雷鸣电闪波尔卡》教学反思
2014/02/23 职场文书
领导干部个人对照检查材料(群众路线)
2014/09/26 职场文书
教师群众路线教育实践活动学习笔记
2014/11/05 职场文书
2016年中学端午节主题活动总结
2016/04/01 职场文书