`
hongtoushizi
  • 浏览: 358307 次
  • 性别: 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()  //检查是否为图片文件(其他类型的文件就算后缀名改了也能被检测到)
分享到:
评论

相关推荐

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

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

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

    主要介绍了php文件上传原理与实现方法,结合实例形式详细分析了PHP文件上传的配置、前后台处理、错误处理等相关操作技巧与注意事项,需要的朋友可以参考下

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

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

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

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

    PHP实现单文件上传与下载

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

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

    今天对多图片上传功能小小的研究了一下,把下面的代码整理出来,方便以后自己使用以及供大家交流 1、upload.html页面,即先是input type=file的文件: 复制代码 代码如下: &lt;html&gt; &lt;head&gt; &lt;title&gt;&...

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

    实现用php发送带附件的邮件 首先我要说的是要做到这个没有什么简单的办法。你要很好的理解PHP或其它的服务器端的脚本语言。当然你还要一个真正支持PHP的网站的账号。如果满足了这个前提,在你读完了本章后就可以用...

    php+html5多进程实现超大附件无刷新上传

    php+html5多进程实现超大附件无刷新上传,支持超大文件,核心原理是前端将文件分割成多个片段,然后依次将片段上传到服务器,服务器后端接收到全部片段后,再组装成完整的文件,已经测试可以正常上传。

    php+ajax实现图片文件上传功能实例

    可采用IFRAME文件上传原理。实际上在用PHP上传文件时。。。只能用$_FILES形式,但是若我们只是单一的用JS方式取其ID,如&lt;input id=’img’ type=’file’&gt;..document.getElementById(‘img’).value或者jquery...

    php + webuploader实现超大文件上传分片上传断点续传(20g+)

    php实现大文件上传分片上传断点续传, 本人测试2gb有效!!! 该项目核心就是文件分块上传。前后端要高度配合,需要双方约定好一些数据,才能完成大文件分块,我们在项目中要重点解决的以下问题。 * 如何分片; * 如何...

    PHP+MYSQL文件的上传入库和下载防盗链

    PHP+MYSQL文件的上传入库和下载防盗链,实现文件上传入UP文件夹,然后记录文件的类型,大小,名称地址,自动生成缩略图。具体操作在upload1.php文件中可以实现文件的上传功能在UP文件夹中可以找到。在list.php文件中...

    PHP100视频教程全集112集BT种子【PHP经典】

    PHP100视频教程14:PHP上传原理及应用 PHP100视频教程15:PHP生成HTML文件原理 PHP100视频教程16:PHP小偷程序原理和实例 PHP100视频教程17:PHP面向对象开发的学习(一) PHP100视频教程18:PHP面向对象开发的...

    PHP实现批量上传单个文件

    这时,我们不禁会面临一个问题,使用菜刀一个个上传显得太慢,那么如何快速的实现文件的批量上传呢?本文给大家介绍基于php如何实现这类需求。 0×01 原理分析 首先,我们必须了解菜刀是如何通过一句话木马来实现web...

    php + WebUploader实现图片批量上传功能

    一.webuploader webuploader主要用来做文件的上传,支持批量上传和... webuploader上传原理 1. PHP+HTML表单上传文件 在讲这个之前,需要先了解一下php的文件上传方式,上传分两个部分 先通过html创建表单,在表单

    PHP实现文件上传与下载实例与总结

    一、上传原理与配置 1.1 原理 将客户端文件上传到服务器端,再将服务器端的文件(临时文件)移动到指定目录即可。 1.2 客户端配置 所需:表单页面(选择上传文件); 具体而言:发送方式为POST,添加enctype=”...

    PHP实现文件上传下载实例

    一、上传原理与配置 1.1 原理 将客户端文件上传到服务器端,再将服务器端的文件(临时文件)移动到指定目录即可。 1.2 客户端配置 所需:表单页面(选择上传文件); 具体而言:发送方式为POST,添加enctype=”...

    php多文件上传

    很好的代码资源哦,里面不仅有详细的代码注释还有很详尽的原理说明,可以下载下来看,一定会有收获的。

    基于Python的PCA人脸识别算法的原理及实现代码详解.zip

    对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同...

Global site tag (gtag.js) - Google Analytics