PHP文件之上传

一、$_FILES数组

  • $_FILES[“file”][“name”]:上传文件的原始名称。
  • $_FILES[“file”][“type”]:上传的文件类型。
  • $_FILES[“file”][“size”]:上传文件的原始大小。
  • $_FILES[“file”][“tmp_name”]:上传文件后的暂存位置。
  • $_FILES[“file”][“error”]:如果上传文件有错误,则显示错误代码
    • UPLOAD_ERR_OK 值:0; 没有错误发生,文件上传成功。
    • UPLOAD_ERR_INI_SIZE 值:1; 上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。
    • UPLOAD_ERR_FORM_SIZE 值:2; 上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。(我们可以在form表单中指定input type=’hidden’ name=’MAX_FILE_SIZE’ value=’附件的最大字节数’)
    • UPLOAD_ERR_PARTIAL 值:3; 文件只有部分被上传。
    • UPLOAD_ERR_NO_FILE 值:4; 没有文件被上传。

二、常见的文件类型

  • xls:application/vnd.ms-excel
  • xlsx:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
  • ppt:application/vnd.ms-powerpoint
  • pptx:application/vnd.openxmlformats-officedocument.presentationml.presentation
  • doc:application/msword
  • docx:application/vnd.openxmlformats-officedocument.wordprocessingml.document
  • zip:application/x-zip-compressed
  • rar:application/x-zip-compressed
  • wmv:video/x-ms-wmv
  • mp3:audio/mpeg
  • mp4:video/mp4
  • gif:image/git
  • jpeg:image/jpeg或image/pjpeg

    备注:对于 IE,识别 jpg 文件的类型必须是 pjpeg,对于 FireFox,必须是 jpeg。

三、文件上传过程

  • 文件被上传结束后,默认地被存储在了临时目录中,这时必须将它从临时目录中删除或移动到其它地方,如果没有,则会被删除。也就是不管是否上传成功,脚本执行完后临时目录里的文件肯定会被删除。所以在删除之前要用PHP的 copy()或者move_upload_file() 函数将它复制或者移动到其它位置,此时,才算完成了上传文件过程。
  • 用form上传文件时,一定要加上属性内容 enctype=”multipart/form-data”,否则用$_FILES[filename]获取文件信息时会报异常。

四、保存上传的文件(move_uploaded_file)

bool move_uploaded_file ( string $filename , string $destination )

参数:

  • filename:上传的文件的文件名。
  • destination:移动文件到这个位置

返回值:

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

五、一个简单的上传文件的例子

注:<form>中的enctype属性的可选值为↓↓↓↓

描述
application/x-www-form-urlencoded 在发送前编码所有字符(默认)
multipart/form-data 不对字符编码。在使用包含文件上传控件的表单时,必须使用该值。
text/plain 空格转换为 “+” 加号,但不对特殊字符编码。

1、上传文件的表单1.html

<html>
<head>
<title>上传文件</title>
</head>

<body>
<form action=‘1.php‘ method=‘post‘ enctype=‘multipart/form-data‘>
选择文件:
<input type=‘file‘ name=‘imgfile‘ />
<br />
<input type=‘submit‘ name=‘submit‘ value=‘提交‘ />
</form>
</body>

</html>

2、处理文件的脚本1.php

<?php
if($_FILES[‘imgfile‘][‘error‘]==0){
    #限制上传的文件类型和大小
    if((($_FILES[‘imgfile‘][‘type‘]=="image/gif")||
    ($_FILES[‘imgfile‘][‘type‘]=="image/jpeg")||
    ($_FILES[‘imgfile‘][‘type‘]=="image/pjpeg"))&&
    ($_FILES[‘imgfile‘][‘size‘])>=30720){
        #注意:此时文件夹upload必须已经存在,否则会报错!
        if(file_exists("upload/".$_FILES[‘imgfile‘][‘name‘]))
            echo "文件已存在,请不要重复上传。";
        else
            move_uploaded_file($_FILES[‘imgfile‘][‘tmp_name‘],"upload/".$_FILES[‘imgfile‘][‘name‘]);
            echo "文件上传成功!";
    }else{
        echo "不是jpeg或gif的图片格式,或者文件小于30k!请重新上传。";
    }
}
?>

六、致谢

版权声明:本文为Lshare原创文章,需要转载的请联系我,有问题欢迎评论或私信。

时间: 2024-10-12 10:05:38

PHP文件之上传的相关文章

FTP文件操作之上传文件

上传文件是一个比较常用的功能,前段时间就做了一个上传图片的模块.开始采用的是共享文件夹的方式,后来发现这种方法不太好.于是果断将其毙掉,后来选择采用FTP的方式进行上传.个人感觉FTP的方式还是比较好用的,所以跟大家分享一下.   /// <summary> /// FTP上传文件 /// </summary> /// <param name="fileUpload">上传控件</param> /// <param name=&qu

robotframework+selenium2library之上传本地文件

针对将本地的文件上传到测试系统,selenium2library提供了一个关键词 choose file choose file    jquery=*[name='Filedata']+label:eq(0)    E:\\a.jpg jquery为上传附件的定位路径,  E:\\a.jpg 为文件存放的路径.

V-3-1 Vmware EXSi中添加虚拟机之上传镜像文件

在安装虚拟机前,可以将需要的ISO映像上传到服务器的存储中以此节约安装时间. 选择你需要操作的服务器后,这里选择"配置"-"存储器" 可以看到这台服务器连接的存储设备和本地存储.选择你准备上传的存储. 右键,选择"浏览数据存储" 出现下图的界面.可在如下窗口中添加文件夹,上传文件与下载文件. 如下图所展示的是将文件上传到数据存储中.

Express采坑系列之上传文件

封装文件上传工具multerUtil.js 创建util文件夹并在其下创建multerUtil.js var multer=require('multer'); var storage = multer.diskStorage({ //设置上传后文件路径,uploads文件夹会自动创建. destination: function (req, file, cb) { cb(null, './public/uploads') }, /** * 给上传文件重命名,获取添加后缀名 * 参数名 + 文件

代码安全之上传文件

上传数据包 从数据包中可以看出,验证文件类型的参数有:Content-Type.Filename.Filedata. 客户端JS验证 原理介绍 通过JS验证上传文件类型是最不安全的做法,因为这个方式是最容易被绕过的.我们先来看下JS实现文件检测的代码如下: 客户端JS验证通常做法是验证上传文件的扩展名是否符合验证条件. 绕过姿势 1 通过firefox的F12修改js代码绕过验证 2 使用burp抓包直接提交,绕过js验证 服务端MIME类型检测 MIME类型介绍 不同的文件类型有不同的MIME

Struts2之上传文件

一.单文件上传 1.定义form表单 <form action="uploadFile" method="post" enctype="multipart/form-data"> 上传文件:<input type="file" name="myFile"> <input type="submit" value="提交"> </

Jmeter之上传文件

前言 我们可以利用postman工具来测试上传文件的接口,那么假如要利用Jmeter工具来进行上传接口的测试,又该如何测试呢? 上传文件的接口地址:/pinter/file/api/upload:接口类型:post:参数名称:file :MINE类型:application/octet-stream : 一:添加上传接口的请求,填入接口地址,添加察看结果树,勾选对POST使用multipart/form-data 二:选择文件上传,导入需要上传的文件 原文地址:https://www.cnblo

FileUpload系列:(1)文件上传的思路和示例

文件上传:第(1)阶段,处理流程 1.浏览器的表单上传文件到Tomcat服务器时,表单中的数据(包括普通文本域,也包括文件)被封装成了request对象 2.要想保存这些表单数据(普通文本.文件),就必须把这些信息从request对象抽取出来 3.把这些表单数据抽取出来的一个类叫做ServletFileUpload. 4.ServletFileUpload有一个方法parseRequest(HttpServletRequest)(A list of FileItem instances pars

ajaxFileUpload+struts2实现多文件上传(动态添加文件上传框)

上篇文章http://blog.csdn.net/itmyhome1990/article/details/36396291介绍了ajaxfileupload实现多文件上传, 但只是固定的文件个数,如果需求不确定是多少文件 则我们就需要动态的添加文件上传框,以实现灵活性. 基于上篇基本框架是不变的,主要修改以下几个方面 1.jQuery实现动态添加删除文件上传框 2.获取文件上传框的ID 3.ajaxfileupload.js里将ID数组转换为需要的Object数组 依次解决上面问题 一.实现动