文件上傳

文件上傳

目的:用戶可以通過瀏覽器,將本地文件上傳到服務器

以單文件上傳爲例

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);
 ?>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章