浅析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过滤危险html代码
Aug 18 PHP
PHP utf-8编码问题,utf8编码,数据库乱码,页面显示输出乱码
Apr 08 PHP
PHP array_multisort() 函数的深入解析
Jun 20 PHP
PHP在引号前面添加反斜杠(PHP去除反斜杠)
Sep 28 PHP
深入理解PHP类的自动载入机制
Sep 16 PHP
YII2框架中使用yii.js实现的post请求
Apr 09 PHP
php利用云片网实现短信验证码功能的示例代码
Nov 18 PHP
Ecshop 后台添加新功能栏目及管理权限设置教程
Nov 21 PHP
Yii2框架实现利用mpdf创建pdf文件功能示例
Feb 08 PHP
PHP htmlentities()函数用法讲解
Feb 25 PHP
基于ThinkPHP5框架使用QueryList爬取并存入mysql数据库操作示例
May 25 PHP
laravel5.6 框架操作数据 Eloquent ORM用法示例
Jan 26 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调用三种数据库的方法(3)
2006/10/09 PHP
PHP 和 XML: 使用expat函数(二)
2006/10/09 PHP
PHP产生随机字符串函数
2006/12/06 PHP
PHP函数spl_autoload_register()用法和__autoload()介绍
2012/02/04 PHP
基于PHP技术开发客服工单系统
2016/01/06 PHP
Centos7.7 64位利用本地完整安装包安装lnmp/lamp套件教程
2021/03/09 Servers
下载站控制介绍字数显示的脚本 显示全部 隐藏介绍等功能
2009/09/19 Javascript
键盘 keycode的值 javascript时触发事件时很有用的要素
2009/11/02 Javascript
IE与firefox下Dhtml的一些区别小结
2009/12/02 Javascript
Javascript 面向对象 重载
2010/05/13 Javascript
浅谈Javascript事件处理程序的几种方式
2012/06/27 Javascript
jquery 列表双向选择器之改进版
2013/08/09 Javascript
JavaScript中window、doucment、body的解释
2013/08/14 Javascript
无刷新预览所选择的图片示例代码
2014/04/02 Javascript
jquery动态切换背景图片的简单实现方法
2016/05/14 Javascript
JavaScript正则替换HTML标签功能示例
2017/03/02 Javascript
Map.vue基于百度地图组件重构笔记分享
2017/04/17 Javascript
Angular4项目中添加i18n国际化插件ngx-translate的步骤详解
2017/07/02 Javascript
详解开发react应用最好用的脚手架 create-react-app
2018/04/24 Javascript
详解Angular-ui-BootStrap组件的解释以及使用
2018/07/13 Javascript
vue 的点击事件获取当前点击的元素方法
2018/09/15 Javascript
jQuery cookie的公共方法封装和使用示例
2020/06/01 jQuery
python字符串连接方式汇总
2014/08/21 Python
python装饰器decorator介绍
2014/11/21 Python
Python+Turtle动态绘制一棵树实例分享
2018/01/16 Python
Linux下Pycharm、Anaconda环境配置及使用踩坑
2018/12/19 Python
tensorflow 利用expand_dims和squeeze扩展和压缩tensor维度方式
2020/02/07 Python
Python中的sys.stdout.write实现打印刷新功能
2020/02/21 Python
基于Python的Jenkins的二次开发操作
2020/05/12 Python
澳大利亚领先的皮肤诊所:Skin Matrix(抗衰老、痤疮专家、药妆护肤)
2018/05/20 全球购物
红领巾广播站广播稿(3篇)
2014/09/20 职场文书
毕业生见习报告总结
2014/11/08 职场文书
go 原生http web 服务跨域restful api的写法介绍
2021/04/27 Golang
pandas中DataFrame重置索引的几种方法
2021/05/24 Python
教你怎么用PyCharm为同一服务器配置多个python解释器
2021/05/31 Python
vue如何清除浏览器历史栈
2022/05/25 Vue.js