浅析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
PHP5函数小全(分享)
Jun 06 PHP
php实现查看邮件是否已被阅读的方法
Dec 03 PHP
php延迟静态绑定实例分析
Feb 08 PHP
typecho插件编写教程(二):写一个新插件
May 28 PHP
学习php设计模式 php实现访问者模式(Visitor)
Dec 07 PHP
php 多文件上传的实现实例
Oct 23 PHP
PHP未登录自动跳转到登录页面
Dec 21 PHP
ThinkPHP框架实现数据增删改
May 07 PHP
阿里云PHP SMS短信服务验证码发送方法
Jul 11 PHP
Yii支持多域名cors原理的实现
Dec 05 PHP
PHP文件操作实例总结【文件上传、下载、分页】
Dec 08 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 咖啡文化
php5中类的学习
2008/03/28 PHP
PHP中isset与array_key_exists的区别实例分析
2015/06/02 PHP
PHP面向对象程序设计OOP继承用法入门示例
2016/12/27 PHP
PHP设计模式之数据访问对象模式(DAO)原理与用法实例分析
2019/12/12 PHP
phpmyadmin在宝塔面板里进不去的解决方案
2020/07/06 PHP
JQuery 风格的HTML文本转义
2009/07/01 Javascript
jquery submit ie6下失效的原因分析及解决方法
2013/11/15 Javascript
Javascript排序算法之合并排序(归并排序)的2个例子
2014/04/04 Javascript
jquery 显示*天*时*分*秒实现时间计时器
2014/05/07 Javascript
基于编写jQuery的无缝滚动插件
2014/08/02 Javascript
javascript实现获取字符串hash值
2015/05/10 Javascript
JS设置下拉列表框当前所选值的方法
2015/12/22 Javascript
jQuery form插件之formDdata参数校验表单及验证后提交
2016/01/23 Javascript
浅谈Javascript数组(推荐)
2016/05/17 Javascript
AngularJS在IE下取数据总是缓存问题的解决方法
2016/08/05 Javascript
javascript中Date对象的使用总结
2016/11/21 Javascript
angular 实现的输入框数字千分位及保留几位小数点功能示例
2018/06/19 Javascript
js实现input密码框显示/隐藏功能
2020/09/10 Javascript
JS对象和字符串之间互换操作实例分析
2019/02/02 Javascript
vue.js实现左边导航切换右边内容
2019/10/21 Javascript
OpenLayers加载缩放控件使用方法详解
2020/09/25 Javascript
python 合并文件的具体实例
2013/08/08 Python
python获得两个数组交集、并集、差集的方法
2015/03/27 Python
Python读取英文文件并记录每个单词出现次数后降序输出示例
2018/06/28 Python
Python拼接微信好友头像大图的实现方法
2018/08/01 Python
python装饰器常见使用方法分析
2019/06/26 Python
pandas基于时间序列的固定时间间隔求均值的方法
2019/07/04 Python
python批量图片处理简单示例
2019/08/06 Python
Python爬取梨视频的示例
2021/01/29 Python
利用HTML5的新特点实现图片文件异步上传
2014/05/29 HTML / CSS
联想澳大利亚官网:Lenovo Australia
2018/01/18 全球购物
财务会计人员岗位职责
2013/11/30 职场文书
2014年办公室主任工作总结
2014/11/12 职场文书
2015年医务人员医德医风自我评价
2015/03/03 职场文书
深度学习详解之初试机器学习
2021/04/14 Python