`
hongtoushizi
  • 浏览: 378844 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

PHP上传原理及实现

    博客分类:
  • php
阅读更多

PHP上传原理及实现

By jing at 81.8天前 • 188点击
jing

关于上传原理和简单的上传操作:

<form action="upload.php" enctype="multipart/form-data" method="post">
        <input type="hidden" name="MAX_FILE_SIZE" value="10000" />
        上传文件:<input type="file" name="file"/>
        <input type="submit" value="上传" />
</form>


1、Form标签enctype属性

表单中enctype="multipart/form-data"是用于设置表单的MIME编码。
默认情况,这个编码格式是application/x-www-form-urlencoded,不能用于文件上传;
只有使用了multipart/form-data且提交方式为Post才能完整的传递文件数据。

2、MAX_FILE_SIZE 隐藏字段

MAX_FILE_SIZE 隐藏字段(单位为字节)必须放在文件输入字段之前,其值为接收文件的最大尺寸。这是对浏览器的一个建议,PHP 也会检查此项。
在浏览器端可以简单绕过此设置,因此不要指望用此特性来阻挡大文件。(不过鉴于友好性最好还是在表单中加上此项目,因为它可以避免用户在花时间等待上传大文件之后才发现文件过大上传失败的麻烦。)

//upload.php
<?php    
    print_r($_FILES);
?>

Array
(
    [file] => Array
        (
            [name] => image.jpg
            [type] => image/jpeg
            [tmp_name] => F:\wamp\tmp\php41BB.tmp
            [error] => 0
            [size] => 73886
        )

)



3、全局变量 $_FILES的应用

$_FILES['file']['name'];  //为上传文件的原文件名
$_FILES['file']['type'];  //为上传文件的 MIME 类型
$_FILES['file']['size'];  //已上传文件的大小,单位为字节
$_FILES['file']['tmp_name'];  //文件被上传后在服务端储存的临时文件名()
$_FILES['file']['error'];  //文件上传的错误代码



4、默认情况下,上传文件会保存在服务端的临时文件夹中,其目录在php.ini中设置

php.ini与文件上传有关的一些常用设置:

file_uploads ;  //是否允许通过HTTP上传文件的开关。默认为ON即是开
upload_tmp_dir ;  //文件上传至服务器上存储临时文件的地方,如果没指定就会用系统默认的临时文件夹
upload_max_filesize;  //即允许上传文件大小的最大值。默认为2M
post_max_size;  //指通过表单POST给PHP的所能接收的最大值,包括表单里的所有值。默认为8M


简单的代码:

<?php
    
    //取得上传文件信息
    $fileName=$_FILES['file']['name'];
    $fileType=$_FILES['file']['type'];
    $fileError=$_FILES['file']['error'];
    $fileSize=$_FILES['file']['size'];
    $tempName=$_FILES['file']['tmp_name'];//临时文件名
    
    //定义上传文件类型
    $typeList = array("image/jpeg","image/jpg","image/png","image/gif"); //定义允许的类型

    if($fileError>0){
            //上传文件错误编号判断
            switch ($fileError) {
                case 1:
                    $message="上传的文件超过了php.ini 中 upload_max_filesize 选项限制的值。"; 
                    break;
                case 2:
                    $message="上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。"; 
                    break;
                case 3:
                    $message="文件只有部分被上传。"; 
                    break;
                case 4:
                    $message="没有文件被上传。";
                    break;
                case 6:
                    $message="找不到临时文件夹。"; 
                    break;
                case 7:
                    $message="文件写入失败"; 
                    break;
                case 8:
                    $message="由于PHP的扩展程序中断了文件上传";
                    break;
            }

            exit("文件上传失败:".$message);

        }
    if(!is_uploaded_file($tempName)){
        //判断是否是POST上传过来的文件
        exit("不是通过HTTP POST方式上传上来的");
    }else{
        if(!in_array($fileType, $typeList)){
            exit("上传的文件不是指定类型");
        }else{
            if(!getimagesize($tempName)){
                //避免用户上传恶意文件,如把病毒文件扩展名改为图片格式
                exit("上传的文件不是图片");
            }
        }
            if($fileSize>100000){
                //对特定表单的上传文件限制大小
                exit("上传文件超出限制大小");
            }else{
                //避免上传文件的中文名乱码
                $fileName=iconv("UTF-8", "GBK", $fileName);//把iconv抓取到的字符编码从utf-8转为gbk输出
                $fileName=str_replace(".", time().".", $fileName);//在图片名称后加入时间戳,避免重名文件覆盖
                if(move_uploaded_file($tempName, "uploads/".$fileName)){
                    echo "上传文件成功!";
                }else{
                    echo "上传文件失败";
                }
            }

        }

?>



5、关于php上传文件的一些常用函数:

file_exists()  //检查文件或目录是否存在
is_uploaded_file()    //判断文件是否是通过 HTTP POST 上传的
move_uploaded_file()    //将上传的文件移动到新位置
is_writable()   //判断给定的文件名是否可写
iconv()  //字符编码互转
str_replace()  //字符串替换(更改文件名,防重名)
getimagesize()  //检查是否为图片文件(其他类型的文件就算后缀名改了也能被检测到)
分享到:
评论

相关推荐

    (第14讲) PHP上传原理及应用

    在本讲中,我们主要探讨的是PHP中的文件上传原理及其实际应用。这涉及到HTML表单的设置、PHP内置的处理上传文件的系统函数以及确保文件安全上传的相关验证方法。以下是详细的知识点解析: 1. **FORM标签enctype属性...

    PHP开发环境下文件上传的原理与实现.pdf

    下面将详细论述PHP开发环境下文件上传的原理与实现方法,并对上传文件的格式类型及大小进行限制。 一、PHP简介 PHP(Hypertext Preprocessor的缩写)是一种运行于服务器端并完全跨平台的嵌入式脚本编程语言。PHP...

    php100-014-PHP上传原理及应用

    本课程“php100-014-PHP上传原理及应用”主要涵盖了PHP实现文件上传的基本原理和实际操作,以帮助开发者更好地理解和应用这一功能。 一、PHP文件上传原理 1. **HTTP协议**:文件上传实际上是通过HTTP协议中的POST...

    php实现文件上传

    **二、处理PHP上传** 在服务器端,我们需要一个PHP脚本来接收并处理上传的文件。以下是一个基本的PHP文件上传处理示例: ```php &lt;?php if(isset($_FILES['userfile']) && $_FILES['userfile']['error'] === UPLOAD...

    PHP100视频教程14:PHP上传原理及应用.rar

    在本套PHP100视频教程中,第14讲主要涵盖了PHP文件上传的基本原理以及在实际应用中的各种技巧。这一部分的知识点至关重要,因为文件上传功能是许多Web应用程序不可或缺的一部分,例如用户提交图片、文档或者视频等。...

    php多文件上传功能实现原理及代码

    以下将详细解释多文件上传的实现原理,并提供一个简单的代码示例。 首先,要实现多文件上传,需要创建一个HTML表单,允许用户选择他们想要上传的文件。在表单中,`&lt;input type="file"&gt;` 元素用于让用户选择文件。...

    php实现通过ftp上传文件

    本篇文章将详细介绍如何使用PHP的FTP相关函数来实现文件上传功能。 首先,我们需要理解FTP上传的基本原理。FTP是一种用于在网络上进行文件传输的应用层协议,它允许用户在两台计算机之间交换文件。在PHP中,我们...

    前端Javascript+Html5+后端PHP分块上传文件

    前端Javascript+Html5+后端PHP分块上传文件,PHP分块上传大文件,该项目可以正常运行,入口为index.html,...2.实现快速上传,即之前上传过,该文件已经存在的,很快就能上传成功,其原理就是文件md5+文件sha1的判断

    php文件上传原理与实现方法详解

    以下是对PHP文件上传原理与实现方法的详细解析: 首先,了解文件上传的原理。当用户通过HTML表单选择文件并提交时,浏览器会将文件作为二进制数据封装在HTTP请求中,以`multipart/form-data`的格式发送。PHP服务器...

    发送带附件的邮件的原理及实现方法

    ### 发送带附件的邮件的原理及实现方法 在当今高度数字化的工作环境中,电子邮件成为了一种重要的沟通方式。尤其对于需要频繁传输文档、图片等附件的业务场景来说,能够发送带有附件的邮件变得尤为重要。本文将详细...

    PHP实现多个文件上传

    在本示例中,我们将探讨如何使用PHP实现多个文件上传的功能。这个功能对于任何需要让用户上传多份文件的Web应用程序都是至关重要的。我们将分析提供的HTML和PHP代码,以理解其工作原理。 首先,HTML部分创建了一个...

    php+html5多进程实现超大附件无刷新上传(更优方案)

    php+html5多进程实现超大附件无刷新上传,支持超大文件,核心原理是前端将文件分割成多个片段,然后依次将片段上传到服务器,服务器后端接收到全部片段后,再组装成完整的文件,后端在组装片段时,会将校验原始文件...

    jquery上传插件uploadify+php完美实现强大的文件上传功能实例+程序

    通过理解Uploadify的工作原理和PHP的文件处理机制,我们可以定制满足特定需求的上传功能,同时保证系统的安全性和稳定性。在实际开发中,应根据项目需求调整配置选项,以优化用户体验和提高系统性能。

    PHP实现单文件上传与下载

    一、PHP文件上传原理 将客户端文件上传到服务器端,再将服务器端的临时文件移动到指定的文件夹下面。 二、开发环境 1、环境搭建:Windows 8+Apache 2.4.18+MySQL 5.7.11+PHP 7.1.0 。 2、文本编辑器:Sublime Text3...

    PHP实现文件的上传下载功能

    在PHP中实现文件的上传和下载是Web开发中常见的需求,尤其对于内容分享、资源管理等类型的网站。这里我们将深入探讨如何使用PHP实现这两个功能,以及需要注意的关键点。 首先,让我们从文件上传开始。在PHP中,文件...

    文件上传原理.pdf

    ### 文件上传原理详解 #### 一、引言 随着信息技术的快速发展,Web应用程序已经成为现代办公自动化系统中的核心组成部分。在这些应用中,文件上传是一项基本而又重要的功能,它允许用户从本地计算机向服务器发送...

    PHP实现大文件分片上传源码可上传几G的文件.rar

    **一、大文件分片上传原理** 大文件分片上传主要是为了避免一次性加载整个大文件到内存中,导致服务器资源耗尽。它将大文件分割成若干个小片段,每个片段单独上传,确保上传过程的稳定性和效率。一旦所有片段都成功...

    php简洁上传程序,做网盘非常实用

    【PHP简洁上传程序】是一种基于PHP开发的轻量级文件...对于初学者来说,这是一个很好的学习项目,能够帮助理解PHP和文件上传的基本原理。对于有经验的开发者,它可以作为一个快速部署的工具,满足基本的文件共享需求。

Global site tag (gtag.js) - Google Analytics