谈谈php中上传文件的处理

  这是一个表单的时代。。。

  我们在浏览器中编辑自己的信息,会遇到上传头像;在文库中,我们会上传文档......到处存在“上传”这个词。

  php是最好的语言(其他语言的程序猿们不要打我...)。php在处理交互方面有天然的优势,自然有强大的函数来处理上传文件。

  和提交一般的数据一样,上传文件也需要表单。下面建立一个特殊的表单来上传文件。

1 <form enctype="multipart/form-data" action="upload_file.php" name="upload_form" method="post">
2     <!--MAX_FILE_SIZE必须在所有的input之前,以后要是想用上传表单,可以在form之后就写隐藏的input-->
3     <input type="hidden" name="MAX_FILE_SIZE" value="30000"/>
4     上传的文件:
5     <input type="file" name="userfile"/>
6     <hr/>
7     <input type="submit" name="sub_button" value="上传文件的提交按钮"/>
8
9 </form>

  ok,我们分析一下这个代码段。

  以上的enctype规定了数据在发送给服务器的时候采用什么编码格式。它有三个值:

  MAX_FILE_SIZE隐藏字段(单位为字节)必须放在文件输入字段之前,其值为文件的最大尺寸。这是对浏览器的一个建议,php也会检查此项。不过在浏览器端可以绕过这个障碍,因此不要指望用它来阻挡大文件。但是文件最大值受php.ini中的post_max_size= (number)M的限制。但是最好还是加上这个项目,它可以避免用户在花时间等待上传大文件之后才发现大文件上传失败的麻烦。

  在用户提交文件表单之后,服务器端就可以接受数据了。PHP中有全局变量$_FILES来处理文件,假设上传字段名称为userfile(可以在字段中随意更改)。

  $_FILES[‘userfile‘][‘name‘]                客户端文件的原名称。

  $_FILES[‘userfile‘][‘type‘]                 文件的MIME类型,这个在PHP端并不检查,因此这个值还不一定有。

  $_FILES[‘userfile‘][‘size‘]                  上传的文件的大小(单位字节)。

$_FILES[‘userfile‘][‘tmp_name‘]         文件上传后在服务器端存储的临时文件名。

  $_FILES[‘userfile‘][‘error‘]                 和该文件上传相关的错误代码。如果上传成功,值为0.

  文件在上传后,默认存储到服务器默认临时目录中,在php.ini中的upload_tmp_dir设置为其他路径。

  在这里还得说说一个move_uploaded_file()函数:

  

  这个函数检查并确保由 file 指定的文件是合法的上传文件(即通过 PHP 的 HTTP POST 上传机制所上传的)。如果文件合法,则将其移动为由 newloc 指定的文件。

  如果 file 不是合法的上传文件,不会出现任何操作,move_uploaded_file() 将返回 false。

  如果 file 是合法的上传文件,但出于某些原因无法移动,不会出现任何操作,move_uploaded_file() 将返回 false,此外还会发出一条警告。

  这种检查显得格外重要,如果上传的文件有可能会造成对用户或本系统的其他用户显示其内容的话。

  下面是一个php上传文件实例:

 1 <b>上传文件处理</b>
 2 <hr/>
 3 <?php
 4 if (isset($_FILES[‘userfile‘])) {
 5     $uploaddir = ‘upload/‘;
 6     $uploadfile = $uploaddir . basename($_FILES[‘userfile‘][‘name‘]);
 7     echo ‘<pre>‘;
 8     if (move_uploaded_file($_FILES[‘userfile‘][‘tmp_name‘], $uploadfile)) {
 9         echo ‘上传文件成功‘.‘<br>‘;
10     } else {
11         echo ‘上传文件失败‘.‘<br>‘;
12     }
13     echo ‘这是上传文件的一些信息:‘ . ‘<br>‘;
14     print_r($_FILES);
15     echo ‘<pre>‘;
16     die();
17 }
18
19 ?>
20 <b>上传表单</b>
21 <!--表单中的enctype属,必须和以下定义保持一致-->
22 <form enctype="multipart/form-data" action="upload_file.php" name="upload_form" method="post">
23     <!--MAX_FILE_SIZE必须在所有的input之前,以后要是想用上传表单,可以在form之后就写隐藏的input-->
24     <input type="hidden" name="MAX_FILE_SIZE" value="30000"/>
25     上传的文件:
26     <input type="file" name="userfile"/>
27     <hr/>
28     <input type="submit" name="sub_button" value="上传文件的提交按钮"/>
29 </form>

时间: 2024-10-15 21:58:58

谈谈php中上传文件的处理的相关文章

微信网页中上传文件时“只能选择SD卡中的文件”问题

需求描述:在微信网页中上传文件到我们自己的服务器,使用 input  type=file标准控件: <input type="file" name="upfile" id="upfile" > 问题来了:苹果可以顺利上传图片文件的,安卓下每次选择完图片文件之后会弹出提示"只能选择SD卡中的文件"不能上传图片.手机已经设置默认存储为SD卡. 百度搜了一个下午没有结果,微信公众平台更没有答案shiiiit. 最后在cs

Mac/Linux/Centos终端中上传文件到Linux云服务器

Mac/Linux/Centos终端中上传文件到Linux云服务器 1.mac上传文件到Linux服务器 scp 文件名 用户名@服务器ip:目标路径如:scp /Users/test/testFile [email protected]:/test/ 2.mac上传文件夹到Linux服务器,与上传文件相比多加了-r scp -r 文件夹目录 用户名@服务器ip:目标路径 如:scp -r /Users/test/testFolder [email protected]:/test/ 3.Lin

JavaScript中上传文件为图片如何读取(UI组件之图片剪裁器)

//获取上传的文件/图片 function getFile(){ var files,len; var reader = new FileReader(); var img_type; addEvent(selectFile,'change',function(){ files = this.files;//selectFile为上传文件表单,this.files获取选择的文件 len = files.length; if(len > 0){ img_type = files[0].type;

thinkphp5中上传文件自定义命名规则

在thinkphp5中:有上传文件一章: https://www.kancloud.cn/manual/thinkphp5/155159 如果对于文件上传这一章,不了解,就先看下面的,再来看这一段. 下面我们自定义两个规则. 1.datea规则,年月/时分秒.(3位随机数) /201706/164030789 2.ymmd5规则,年/月/md5 修改框架文件:thinkphp/library/think/File.php. 增加两个case: case 'datea': case 'ymmd5'

【解决】AWS服务控制台中上传文件失败

使用IE 11,在 AWS Services Console 中不管是 S3 还是 Elastic Beanstalk 的页面中上传页面都会失败,提示信息如下: A problem occurred while uploading to S3. 但是在 Chome 中则没有此问题. 此问题的原因判断非常离散,而且有时候同样的操作并不一定能复现.经过反复的尝试,可能与如下两方面原因有问题: 1. IE 设置 在 IE 的 “Internet 选项 > 安全 > Internet > 自定义

Java中上传文件和表单数据提交如何保持数据的一致性?

学生申请学科竞赛活动,表单中有学科竞赛的申报信息和部分附件,需要做到将上传文件和表单数据提交保持一致性. 将上传文件和插入表单数据放到事务汇总去处理,由于表单的数据我们可以控制,但是上传的文档不好控制.一方面我就把表单数据提交放置在文件上传前面,这样当表单数据提交发生异常我们可以回滚,文件并未上传,当文件上传发生异常时,我们可以回滚数据库的数据,只有当文件正常上传时我们才提交数据库数据... ----------------------------------------------------

ASP.Net中上传文件的几种方法

在做Web项目时,上传文件是经常会碰到的需求.ASP.Net的WebForm开发模式中,封装了FileUpload控件,可以方便的进行文件上传操作.但有时,你可能不希望使用ASP.Net中的服务器控件,仅仅使用Input标签来实现文件上传.当然也是可以的.下面总结在项目中使用过的上传文件的方式. 一.使用Asp.Net中的FileUpload服务器端控件实现上传 使用asp.net中的服务器端控件FileUpload上传文件非常方便.FileUpload对上传操作进行了封装,你只需要调用Save

django中上传文件的三种方式

前端代码: <style> .upload{ display: inline-block;padding: 10px; background-color: brown; position: absolute; top: 0; bottom: 0; right: 0; left: 0; z-index: 90; } .file{ width: 100px;height: 50px;opacity: 0; position: absolute; top: 0; bottom: 0; right:

jeecg中上传文件相关属性的设置

关于文件的存取,jeecg默认是会把上传的文件存在项目根目录下的upload/files目录下的,当然你也可以指定对应的目录,只要在new UploadFile后,设置basePath属性即可,如果你不想把文件以二进制的方式存放在数据库中也是可以的,只要在new UploadFile时把byteField属性设置为null即可. 具体可参见 org.jeecgframework.core.common.dao.impl.CommonDao类中的uploadFile方法.