浅析PHP 中move_uploaded_file 上传中文文件名失败
项目需要上传文件名保持不变,发现上传中文失败:错误如下:
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中CheckBox多选框上传失败的代码写法
用惯Java和其他语言的时候,表单上传只需要checkbox的name相同的时候就可以上传了 <input type="checkbox" name="checkbox" value="1"> 选项 <input type="checkbox" name="checkbox" value="2"> 选项 <input type="checkbox&
-
PHP中uploaded_files函数使用方法详解
对PHP语言有些了解的朋友们都知道,它包含有功能强大的函数库.我们今天就一起来了解一下PHP uploaded_files函数的具体功能. 在早期的PHP版本中,上传文件很可能是通过如下的代码实现的: 复制代码 代码如下: -- if (isset($_FILES['file'])) { $tmp_name = $_FILES['file']['tmp_name']; } if (file_exists($tmp_name)) { copy($tmp_name,$destfile); } --
-
php上传大文件失败的原因及应对策略
为什么上传大文件总是失败,但是上传小文件就没有问题.小编也不得其解,网上搜其原因,整理了一篇关于php上传大文件失败的原因和解决办法的文章,分享给大家. 下面分别是各种原因以及解决办法: 第1种情况:文件上传时存放文件的临时目录必须是开启的并且是 PHP 进程所有者用户可写的目录.如果未指定则 PHP 使用系统默认值. php.ini文件中upload_tmp_dir用来说明PHP上传的文件放置的临时目录,要想上传文件,得保证服务器没有关闭临时文件并对该文件夹有写入的权限. 第2种情况:max_
-
PHP move_uploaded_file() 函数(将上传的文件移动到新位置)
定义和用法 move_uploaded_file() 函数将上传的文件移动到新位置. 若成功,则返回 true,否则返回 false. 语法 move_uploaded_file(file,newloc) 参数 描述 file 必需.规定要移动的文件. newloc 必需.规定文件的新位置. 说明 本函数检查并确保由 file 指定的文件是合法的上传文件(即通过 PHP 的 HTTP POST 上传机制所上传的).如果文件合法,则将其移动为由 newloc 指定的文件. 如果 file 不是合法
-
解决PHP上传非标准格式的图片pjpeg失败的方法
前一阵子网站新上了相册功能,可最近总发现有一些用户上传的图片文件链接失效,代码检查了很多次,测试也做的比较充分了,但还是会出现上传失败的问题,很是郁闷,今天终于找到了解决办法. 从备份源中找到了用户上传失败的JPG图片,进行上传测试,上传完成后页面提示: Warning: imagecreatefromjpeg(): '/tmp/lalala' is not a valid JPEG file in /path/upload.php on line 1 出现这个Warning是由于GD函数库检测
-
浅析PHP 中move_uploaded_file 上传中文文件名失败
项目需要上传文件名保持不变,发现上传中文失败:错误如下: 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&qu
-
Java中FTPClient上传中文目录、中文文件名乱码问题解决方法
问题描述: 使用org.apache.commons.net.ftp.FTPClient创建中文目录.上传中文文件名时,目录名及文件名中的中文显示为"??". 原因: FTP协议里面,规定文件名编码为iso-8859-1,所以目录名或文件名需要转码. 解决方案: 1.将中文的目录或文件名转为iso-8859-1编码的字符.参考代码: 复制代码 代码如下: String name="目录名或文件名"; name=new String(name.getBytes(&qu
-
php上传中文文件名乱码问题处理方案
php上传文件是最最基础的一个技术点,但是深入进去也有不少问题需要解决,这不,上传中文文件后,文件名变成了乱码. 下面是问题代码,很简单: 1.问题代码 html部分: 复制代码 代码如下: <html> <body> <form action="upload_file.php" method="post" enctype="multipart/form-data"> <label for=&qu
-
ASP.NET中文件上传下载方法集合
文件的上传下载是我们在实际项目开发过程中经常需要用到的技术,这里给出几种常见的方法,本文主要内容包括: 1.如何解决文件上传大小的限制 2.以文件形式保存到服务器 3.转换成二进制字节流保存到数据库以及下载方法 4.上传Internet上的资源 第一部分: 首先我们来说一下如何解决ASP.NET中的文件上传大小限制的问题,我们知道在默认情况下ASP.NET的文件上传大小限制为2M,一般情况下,我们可以采用更改WEB.Config文件来自定义最大文件大小,如下: <httpRuntime exec
-
定制FileField中的上传文件名称实例
FileField中的upload_to属性可以设定上传文件的存储目录和名称,它可以是个字符串,也可以是个callable,比如一个方法. 当upload_to的值设为一个方法时,就可以对上传文件的名称进行修改了.方法需要两个参数,instance与filename,instance为此FileField所属的Model实例,filename为上传文件的名称. 举例: def user_directory_path(instance, filename): # file will be uplo
-
关于定制FileField中的上传文件名称问题
FileField中的upload_to属性可以设定上传文件的存储目录和名称,它可以是个字符串,也可以是个callable,比如一个方法. 当upload_to的值设为一个方法时,就可以对上传文件的名称进行修改了.方法需要两个参数,instance与filename,instance为此FileField所属的Model实例,filename为上传文件的名称. 举例: def user_directory_path(instance, filename): # file will be uplo
-
Egg.js 中 AJax 上传文件获取参数的方法
依赖 formidable 代码 前端 <fieldset style="margin: 20px; padding: 20px;"> <legend>单文件,Ajax</legend> <form id="form3"> <div> <input type="text" id="customName" placeholder="自定义文件名"
-
Java中多媒体文件上传及页面回显的操作代码
文件上传页面 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&
-
聊聊在Servlet中怎么上传文件
首先对Servlet上传文件的简单理解 此前,Servlet本身没有对文件上传提供直接的支持,一般需要使用第三方框架来实现,这样就比较麻烦 不过,Servlet3.0之后提供了这个功能,而且使用非常简单,,为此,HTTPServletRequest提供了两个方法用于从请求中解析出上传的文件: Part getPart(String name) //获取请求中给定 name 的文件 Collection<Part> getParts() //获取所有的文件 其中每一个文件用一个javax.ser
-
Python中Selenium上传文件的几种方式
目录 1. input 元素上传文件 2. input 元素隐藏 3. 文件选择对话框 4. 使用 pywinauto 上传文件 5. pyautogui 6. 并发问题 Selenium 封装了现成的文件上传操作.但是随着现代前端框架的发展,文件上传的方式越来越多样.而有一些文件上传的控件,要做自动化控制会更复杂一些,这篇文章主要讨论在复杂情况下,如何通过自动化完成文件上传. 1. input 元素上传文件 如果页面需要文件上传,那么在大多数情况下,都能在页面源代码中找到一个input的元素.
随机推荐
- go语言检测文件是否存在的方法
- Oracle表空间数据文件移动的方法
- DOM2非标准但却支持很好的几个属性小结
- OpenStack 创建windows镜像实现步骤
- js仿百度有啊通栏展示效果实现代码
- JS trim去空格的最佳实践
- 简单解析PHP程序的运行流程
- php对包含html标签的字符串进行截取的函数分享
- Python使用asyncio包处理并发详解
- 2~62位任意进制转换方法(c++)
- Android之Notification的多种用法实例
- php实现两个数组相加的方法
- jquery parent和parents的区别分析
- centos7中安装Android SDK的方法步骤
- servlet下载文件实现代码详解(五)
- Python中顺序表的实现简单代码分享
- Nginx应用之Location路由反向代理及重写策略示例
- android自定义圆形倒计时显示控件
- C#程序异常关闭时的捕获
- Docker能否成为下一个“Linux”?