浅析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教程 基本语法
Oct 23 PHP
php处理斐波那契数列非递归方法
Feb 04 PHP
mysql数据库差异比较的PHP代码
Feb 05 PHP
深入PHP empty(),isset(),is_null()的实例测试详解
Jun 06 PHP
浅谈php中mysql与mysqli的区别分析
Jun 10 PHP
php 发送带附件邮件示例
Jan 23 PHP
ThinkPHP之foreach标签使用概述
Jun 30 PHP
php对关联数组循环遍历的实现方法
Mar 13 PHP
php实现XML和数组的相互转化功能示例
Feb 08 PHP
php生成图片缩略图功能示例
Feb 22 PHP
PHP实现的用户注册表单验证功能简单示例
Feb 25 PHP
php弹出提示框的是实例写法
Sep 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
重置版战役片段
2020/04/09 魔兽争霸
php网页后退不再出现过期
2007/03/08 PHP
php中3des加密代码(完全与.net中的兼容)
2012/08/02 PHP
php curl 获取https请求的2种方法
2015/04/27 PHP
详解PHP中的PDO类
2015/07/06 PHP
php中二维数组排序问题方法详解
2015/08/28 PHP
PHP中使用foreach()遍历二维数组的简单实例
2016/06/13 PHP
PHPMailer发送邮件
2016/12/28 PHP
AJAX的使用方法详解
2017/04/29 PHP
Windows平台实现PHP连接SQL Server2008的方法
2017/07/26 PHP
jQuery AJAX 调用WebService实现代码
2010/03/24 Javascript
js、css、img等浏览器缓存问题的2种解决方案
2013/10/23 Javascript
javascript中Array()数组函数详解
2015/08/23 Javascript
bootstrap datepicker 与bootstrapValidator同时使用时选择日期后无法正常触发校验的解决思路
2016/09/28 Javascript
基于angular中的重要指令详解($eval,$parse和$compile)
2016/10/21 Javascript
JavaScript学习笔记之函数记忆
2017/09/06 Javascript
详解Vue源码学习之callHook钩子函数
2018/07/25 Javascript
基于Three.js实现360度全景图片
2018/12/30 Javascript
微信公众号获取用户地理位置并列出附近的门店的示例代码
2019/07/25 Javascript
Vue实现数据请求拦截
2019/10/23 Javascript
浅谈Node新版本13.2.0正式支持ES Modules特性
2019/11/25 Javascript
浅谈JavaScript中this的指向问题
2020/07/28 Javascript
Python守护进程(daemon)代码实例
2015/03/06 Python
django迁移数据库错误问题解决
2019/07/29 Python
在PyTorch中Tensor的查找和筛选例子
2019/08/18 Python
Pytorch实现GoogLeNet的方法
2019/08/18 Python
关于pytorch处理类别不平衡的问题
2019/12/31 Python
Canvas 文本填充线性渐变的使用详解
2020/06/22 HTML / CSS
薇诺娜官方网上商城:专注敏感肌肤
2017/05/25 全球购物
什么是URL
2015/12/13 面试题
英文版销售经理个人求职信
2013/11/20 职场文书
户籍证明书标准模板
2014/09/10 职场文书
村级干部党员公开承诺事项
2015/05/04 职场文书
2019中秋节祝福语大全,提前收藏啦
2019/09/10 职场文书
利用前端HTML+CSS+JS开发简单的TODOLIST功能(记事本)
2021/04/13 Javascript
MySQL的表级锁,行级锁,排它锁和共享锁
2022/07/15 MySQL