天天看點

檔案上傳檔案上傳

檔案上傳

目的:使用者可以通過浏覽器,将本地檔案上傳到伺服器

以單檔案上傳為例

sinFun.php

<?php
    /**
    *檔案上傳函數
    *
    *@param  string  $name  檔案上傳檔案域的name值
    *@param  string  $dir  檔案上傳的指定儲存路徑
    *@param  array  $allow  檔案上傳允許的檔案類型
    *
    *return  string  $filename  檔案名  失敗時,傳回false
    *
    */

    function uploads($name,$dir,$allow=array('image/jpeg','image/png'))
    {
        //1.  判斷檔案上傳錯誤
        if($_FILES[$name]['error'] > 0) {
            //檔案上傳出錯
            switch($_FILES[$name]['error']) {
                case 1:
                    echo '上傳的檔案大小超過配置檔案中的upload_max_filesize值';
                    break;
                case 2:
                    echo '上傳檔案的大小超過表單送出的最大值';
                    break;
                case 3:
                    echo '檔案隻有部分上傳';
                    break;
                case 4:
                    echo '沒有檔案被上傳';
                    break;
                case 6:
                    echo '找不到臨時檔案夾';
                    break;
                case 7:
                    echo '檔案寫入失敗';
                    break;
                default :
                    echo '其它錯誤';
                    break;
            }
            return false;
        }

        //2.  判斷你上傳檔案的類型是否是你想要的類型
        if(!in_array($_FILES[$name]['type'],$allow)) {
            echo '檔案類型不符合';
            return false;
        }

        //3.  擷取上傳檔案字尾名
        $suffix = pathinfo($_FILES[$name]['name'],PATHINFO_EXTENSION);

        //4.  起名字
        $filename = date('Ymd').uniqid().mt_rand(0,9999999).'.'.$suffix;

        //5.  判斷儲存的路徑是否存在
        $save_path = rtrim($dir,'/');
        $save_path .= '/';
        $save_path .= date('Ymd');
        // var_dump($save_path);

        if(!file_exists($save_path)) {
            mkdir($save_path,777,true);
        }

        //拼接一個完整的儲存路徑
        $path = $save_path.'/'.$filename;
        // var_dump($path);die;
        //6  判斷是否是HTTP  post方式上傳
        if(!is_uploaded_file($_FILES[$name]['tmp_name'])) {
            echo '傳輸方式不對';
            return false;
        }

        //7  移動圖檔
        if(!move_uploaded_file($_FILES[$name]['tmp_name'], $path)) {
            echo '移動失敗';
            return false;
        }

        //傳回移動成功的檔案名
        return $filename;

    }
 ?>           

upload.html

<!DOCTYPE html>
<html lang="zh" dir="ltr">
    <head>
        <meta charset="utf-8">
        <title>單檔案上傳</title>
    </head>
    <body>
        <form  action="upload.php" method="post" enctype="multipart/form-data">
            上傳頭像:<input type="file" name="profile" />
            <button>送出</button>
        </form>
        <!--
            注意:
                1. 表單送出的方式必須是 post
                2. form表單中必須添加enctype屬性
                3. input 中要設定name屬性
        -->
    </body>
</html>
           

upload.php

<?php
        include("./sinFun.php");
        $result = uploads('profile','./upload',array('image/jpeg','image/png'));
        var_dump($result);
 ?>