• PHP中的文件上传


    文件上传:
        1.单个文件上传
        2.多个文件上传
        一.PHP配置文件中和上传有关的选项
        file_uploads=on
        upload_max_filesize=    最大不要超过服务器的内存
        upload_tmp_dir=     上传文件的临时路径
        二.上传表单需要注意事项
            1.如果有文件操作,表单的提交方式必须是POST提交
            2.表单上传需要使用type为file的表单
            3.enctype="multipart/form-data"只要有文件上传就要改为这个值,其他情况可以使用默认值,用来指定表单编码的数据方式,让服务器知道,我们需要传递一个文件并带有一些常规的表单信息
            4.建议添加一个MAX_FILE_SIZE隐藏表单,值得单位也是字节

        三.PHP处理上传的数据
            如果是文件上传的数据则使用$_FILES处理上传的文件
            $_POST接受非上传的数据
            
            //上传文件传递的信息
            Array
            (
            [pic] => Array
                (
                    [name] => 1.jpg
                    [type] => image/jpeg
                    [tmp_name] => uploadtempphpFFAB.tmp
                    [error] => 0
                    [size] => 9992
                )
            1.使用$_FILES["表单名"]["error"]检查上传是否出错
                UPLOAD_ERR_OK
                    其值为 0,没有错误发生,文件上传成功。
                UPLOAD_ERR_INI_SIZE
                    其值为 1,上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。
                UPLOAD_ERR_FORM_SIZE
                    其值为 2,上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。
                UPLOAD_ERR_PARTIAL
                    其值为 3,文件只有部分被上传。
                UPLOAD_ERR_NO_FILE
                    其值为 4,没有文件被上传。
                UPLOAD_ERR_NO_TMP_DIR
                    其值为 6,找不到临时文件夹。PHP 4.3.10 和 PHP 5.0.3 引进。
                UPLOAD_ERR_CANT_WRITE
                    其值为 7,文件写入失败。PHP 5.1.0 引进。
            2.使用$_FILES["表单名"]["size"]限制大小,单位是字节 1M=1000000
            
            3.使用$_FILES["表单名"]["type"]或是文件的扩展名限制类型
            
            4.将上传后的文件名改名

    实例:

    view.html

    <html>
        <head>
            <title>File Upload</title>
        </head>
    
        <body>
            <form action="upload.php" method="post" enctype="multipart/form-data">
            shopname:<input type="text" name="shopname" /><br>
            shopprice:<input type="text"  name="price" /><br>
            shopnum:<input type="text" name="num" /><br>
            <input type="hidden" name="MAX_FILE_SIZE" value="20000000" />
            shoppic:<input type="file" name="pic"/><br>
            <input type="submit" name="sub" value="添加商品" /><br>
            </form>
        </body>
    </html>

    upload.php

    <?php
    /*echo "<pre>";
    print_r($_POST);
    
    print_r($_FILES);
    echo "</pre>";
    
    Array
            (
            [pic] => Array
                (
                    [name] => 1.jpg
                    [type] => image/jpeg
                    [tmp_name] => D:uploadtempphpFFAB.tmp
                    [error] => 0
                    [size] => 9992
                )
    */
    
    //使用$_FILES["pic"]["error"]检查上传是否出错
    if($_FILES["pic"]["error"]>0){
        switch($_FILES["pic"]["error"]){
            case 1:
            echo "上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值<br>";
            break;
    
            case 2:
            echo "上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。<br>";
            break;
    
            case 3:
            echo "文件只有部分被上传。<br>";
            break;
    
            case 4:
            echo "没有文件被上传。<br>";
            break;
            default:
            echo "未知错误<br>";
        }
    }
    
    
    //使用$_FILES["pic"]["size"]限制大小,单位是字节 1M=1000000
    //echo $_FILES["pic"]["size"];
    $maxsize=50000;  //50k
    if($_FILES["pic"]["size"]>$maxsize){
        echo "上传的文件太大,不能超过{$maxsize}字节";
        exit;
    }
    
    //使用$_FILES["pic"]["type"]或是文件的扩展名限制类型
    /*list($dl,$xl)=explode("/", $_FILES["pic"]["type"]);
    if($dl!="image"){
        echo "请上传一个图片";
        exit;
    }*/
    //按.将文件名分割
    $arr=explode(".",$_FILES["pic"]["name"]);
    //取后缀名
    $hz=$arr[count($arr)-1];
    //echo $hz;
    //设置上传图片允许的类型
    $allowtype=array("png","jpg","jpeg");
    //判断后缀是否在要求的图片类型中
    if(!in_array($hz,$allowtype)){
        echo "这是不允许的类型";
        exit;
    }
    
    //将上传后的文件名改名
    //将临时位置的文件移动到指定的目录上
    
    //制作上传文件的随机名
    $filepath="./upload/";   //随机名路径
    $randname=date("Y").date("m").date("d").date("H").date("i").date("s").rand(100,999).".".$hz;    //随机文件名
    //判断是否是上传文件
    if(is_uploaded_file($_FILES["pic"]["tmp_name"])){
        //移动上传文件有专用的函数
        if(move_uploaded_file($_FILES["pic"]["tmp_name"],$filepath.$randname)){
            echo "上传文件成功!";
        }else{
            echo "上传失败!";
        }
    
    }else{
        echo "不是一个上传文件";
    }
    
    //echo "上传文件成功!<br>";
    ?>
  • 相关阅读:
    Oracle exp/imp导出导入工具的使用
    导入导出数据语句小结
    改变一生的五句话
    给年轻工程师的十大忠告
    项目经理三步曲(项目经理成长版)
    写作、写程序的快乐和痛苦
    《Excel与VBA程序设计(mini版)》
    《3S新闻周刊》第三期发布: 解密Google Earth
    《Excel与VBA程序设计》进度(2006.3.8)
    Arc2Earth正式发布
  • 原文地址:https://www.cnblogs.com/Y-HKL/p/5410122.html
Copyright © 2020-2023  润新知