浅析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五种设计模式小结
Mar 23 PHP
PHP新手入门学习方法
May 08 PHP
让PHP更快的提供文件下载的代码
Jun 13 PHP
19个Android常用工具类汇总
Dec 30 PHP
php截取指定2个字符之间字符串的方法
Apr 15 PHP
php打包网站并在线压缩为zip
Feb 13 PHP
php简单复制文件的方法
May 09 PHP
PHP 配置后台登录以及模板引入
Jan 24 PHP
PHP 实现字符串翻转(包含中文汉字)的实现代码
Apr 01 PHP
PHP基于redis计数器类定义与用法示例
Feb 08 PHP
PHP实现获取文件mime类型多种方法解析
May 28 PHP
Yii使用DbTarget实现日志功能的示例代码
Jul 21 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 强制下载文件代码
2010/10/24 PHP
PHP使用memcache缓存技术提高响应速度的方法
2014/12/26 PHP
php三种实现多线程类似的方法
2015/10/30 PHP
php版微信公众号自定义分享内容实现方法
2016/09/22 PHP
PHPMailer使用QQ邮箱实现邮件发送功能
2017/08/18 PHP
php数组遍历类与用法示例
2019/05/24 PHP
Laravel框架处理用户的请求操作详解
2019/12/20 PHP
PHP大文件分割分片上传实现代码
2020/12/09 PHP
javascript 获取所有id中包含某关键字的控件的实现代码
2010/11/25 Javascript
jquery text(),val(),html()方法区别总结
2013/11/04 Javascript
JS实现距离上次刷新已过多少秒示例
2014/05/23 Javascript
JQuery中使用Ajax赋值给全局变量失败异常的解决方法
2014/08/18 Javascript
angularjs学习笔记之简单介绍
2015/09/26 Javascript
ExtJS 4.2 Grid组件单元格合并的方法
2016/10/12 Javascript
html中鼠标滚轮事件onmousewheel的处理方法
2016/11/11 Javascript
jQuery模拟淘宝购物车功能
2017/02/27 Javascript
浅谈angular2子组件的事件传递(任意组件事件传递)
2018/09/30 Javascript
在Vue里如何把网页的数据导出到Excel的方法
2020/09/30 Javascript
python实现字符串和日期相互转换的方法
2015/05/13 Python
python从入门到精通(DAY 2)
2015/12/20 Python
详解python中executemany和序列的使用方法
2017/08/12 Python
Python 统计字数的思路详解
2018/05/08 Python
使用pygame写一个古诗词填空通关游戏
2019/12/03 Python
pytorch模型存储的2种实现方法
2020/02/14 Python
澳大利亚家具商店:Freedom
2020/12/17 全球购物
求职推荐信
2013/10/28 职场文书
致短跑运动员广播稿
2014/01/09 职场文书
竞选副班长演讲稿
2014/04/24 职场文书
元旦晚会活动总结
2014/07/09 职场文书
简易离婚协议书(范本)
2014/10/25 职场文书
三峡导游词
2015/01/31 职场文书
小学教师个人总结
2015/02/05 职场文书
酒店服务员岗位职责
2015/02/09 职场文书
如何拟写通知正文?
2019/04/02 职场文书
Redis IP地址的绑定的实现
2021/05/08 Redis
PyTorch 实现L2正则化以及Dropout的操作
2021/05/27 Python