1. 程式人生 > >PHP 檔案上傳

PHP 檔案上傳

PHP 基礎

這裡教大家一個PHP檔案上傳的方法,並返回網路檔案的位置

操作環境

  • 作業系統:Win7
  • 伺服器工具: XAMPP

直接上原始碼,後面寫寫使用的方法

/**
     *  上傳檔案的方法
     * 第一個引數 要過濾的資料型別 必須是陣列
     * 第二個引數 前端上傳時用的 name 名稱  例:<input type='file' name='file'>為例
     * 第三個引數 檔案上傳後要存放的位置 以呼叫該方法的檔案為基礎
     * 第四個引數 設定一個檔名稱 $_FILES[$postname]["name"]  這個名稱就是上傳檔案的名稱,建議修改
     * 第五個引數 設定要上傳檔案的大小 預設 2M
     * 第六個引數 上傳了檔案後需要一個檔案在網路上的地址 最後 / 不能省略 
     */
    function uploadFile($arrayinfo){
        $status = 0;
        $msg = "";
        $data = null;

        // 六個引數 預設值
        $init = array(
            'filter'=>array(),                      // 過濾型別,預設不過濾
            'postname'=>'file',                     // 前臺上傳的name名稱
            'filedir'=>'./uploads/',                // 要上傳的資料夾
            'filename'=>$_FILES['file']["name"],    // 要上傳的檔名
            'filesize'=>1024*1024*2,                // 上傳檔案的大小上限
            'url'=>'https://www.xialijun.top/',     // 預設網路圖片地址
        );
        // 後面的覆蓋前面的  修改一下引數
        $init = array_merge($init,$arrayinfo);
        // 開始過濾
        $filter = in_array($_FILES[$init['postname']]["type"],$init['filter']);

        if($filter && ($_FILES[$init['postname']]["size"] < $init['filesize']) ){

            if($_FILES[$init['postname']]["error"]>0){
                switch ($_FILES[$init['postname']]['error']) {
                    case 1:
                        $str = '上傳的檔案超過了 php.ini 中 upload_max_filesize 選項限制的值';
                        break;
                    case 2:
                        $str = '上傳的檔案的大小超過了 HTML 表單中 MAX_FILE_SIZE 選項指定的值';
                        break;
                    case 3:
                        $str = '檔案只有部分被上傳';
                        break;
                    case 4:
                        $str = '沒有檔案被上傳';
                        break;
                    case 6:
                        $str = '找不到臨時資料夾';
                        break;
                    case 7:
                        $str = '檔案寫入失敗';
                        break;
                }
                $msg = $str;
            }
            else{
                // 返回檔案的字尾名
                $suffix = explode('.', $_FILES[$init['postname']]["name"]);
                $suffix = $suffix[count($suffix)-1];
                // 判斷檔案是否存在
                if(file_exists($init['filedir'].$_FILES[$init['postname']]["name"])){
                    echo $_FILES[$init['postname']]["name"]." 上傳檔案已存在 ";
                }
                else{
                    // 上傳的檔案被移動到 指定位置
                    @move_uploaded_file($_FILES[$init['postname']]["tmp_name"],$init['filedir'].$init['filename'].".".$suffix);
                    // 設定狀態證明檔案上傳成功
                    $status = 1;  
                    // 上傳成功的提示
                    $msg = "上傳成功";
                    // 返回檔案的網路地址
                    $data = $init['url'].$init['filename'].".".$suffix;
                }
            }
        }
        else{
            $str =$_FILES[$init['postname']]["type"]."     上傳檔案有問題";

            if(false){
                $str = $_FILES[$init['postname']]["name"]."    不符合要求<br>";
                $str .= "可能的情況是:  <br>";
                $str .= "1.檔案大於5M;<br>";
                $str .= "2.檔案的型別不符合要求    當前的型別是: ".$_FILES[$init['postname']]["type"].";<br>";
                 $str .= "支援的型別有:<br>";
                foreach ($init['filter'] as $value) {
                     $str .= $value."<br>";
                }
            }

            $msg = $str;
        }

        return array('status'=>$status,'msg'=>$msg,'data'=>$data);
    }

使用方法

/**
    *   這裡就是把上傳的引數設定好後傳入  上面的方法中
    */
    $init = array(
            'filter'=>array('image/jpeg'),                 // 過濾型別,預設不過濾
            'postname'=>'p',                     // 前臺上傳的name名稱
            'filedir'=>'../uploads/',                // 要上傳的資料夾
            'filename'=>time().'_'.rand(10000,99999),    // 要上傳的檔名
            'url'=>'http://127.0.0.1/uploads/',     // 預設網路圖片地址
     );
    // 開始上傳檔案
    $res = uploadFile($init);
    // 上傳完成後,檢視上傳的是否正確
    var_dump($res);

感謝檢視,多關注,多評論,謝謝!!

PHP 基礎

這裡教大家一個PHP檔案上傳的方法,並返回網路檔案的位置

操作環境

  • 作業系統:Win7
  • 伺服器工具: XAMPP

直接上原始碼,後面寫寫使用的方法

/**
     *  上傳檔案的方法
     * 第一個引數 要過濾的資料型別 必須是陣列
     * 第二個引數 前端上傳時用的 name 名稱  例:<input type='file' name='file'>為例
     * 第三個引數 檔案上傳後要存放的位置 以呼叫該方法的檔案為基礎
     * 第四個引數 設定一個檔名稱 $_FILES[$postname]["name"]  這個名稱就是上傳檔案的名稱,建議修改
     * 第五個引數 設定要上傳檔案的大小 預設 2M
     * 第六個引數 上傳了檔案後需要一個檔案在網路上的地址 最後 / 不能省略 
     */
    function uploadFile($arrayinfo){
        $status = 0;
        $msg = "";
        $data = null;

        // 六個引數 預設值
        $init = array(
            'filter'=>array(),                      // 過濾型別,預設不過濾
            'postname'=>'file',                     // 前臺上傳的name名稱
            'filedir'=>'./uploads/',                // 要上傳的資料夾
            'filename'=>$_FILES['file']["name"],    // 要上傳的檔名
            'filesize'=>1024*1024*2,                // 上傳檔案的大小上限
            'url'=>'https://www.xialijun.top/',     // 預設網路圖片地址
        );
        // 後面的覆蓋前面的  修改一下引數
        $init = array_merge($init,$arrayinfo);
        // 開始過濾
        $filter = in_array($_FILES[$init['postname']]["type"],$init['filter']);

        if($filter && ($_FILES[$init['postname']]["size"] < $init['filesize']) ){

            if($_FILES[$init['postname']]["error"]>0){
                switch ($_FILES[$init['postname']]['error']) {
                    case 1:
                        $str = '上傳的檔案超過了 php.ini 中 upload_max_filesize 選項限制的值';
                        break;
                    case 2:
                        $str = '上傳的檔案的大小超過了 HTML 表單中 MAX_FILE_SIZE 選項指定的值';
                        break;
                    case 3:
                        $str = '檔案只有部分被上傳';
                        break;
                    case 4:
                        $str = '沒有檔案被上傳';
                        break;
                    case 6:
                        $str = '找不到臨時資料夾';
                        break;
                    case 7:
                        $str = '檔案寫入失敗';
                        break;
                }
                $msg = $str;
            }
            else{
                // 返回檔案的字尾名
                $suffix = explode('.', $_FILES[$init['postname']]["name"]);
                $suffix = $suffix[count($suffix)-1];
                // 判斷檔案是否存在
                if(file_exists($init['filedir'].$_FILES[$init['postname']]["name"])){
                    echo $_FILES[$init['postname']]["name"]." 上傳檔案已存在 ";
                }
                else{
                    // 上傳的檔案被移動到 指定位置
                    @move_uploaded_file($_FILES[$init['postname']]["tmp_name"],$init['filedir'].$init['filename'].".".$suffix);
                    // 設定狀態證明檔案上傳成功
                    $status = 1;  
                    // 上傳成功的提示
                    $msg = "上傳成功";
                    // 返回檔案的網路地址
                    $data = $init['url'].$init['filename'].".".$suffix;
                }
            }
        }
        else{
            $str =$_FILES[$init['postname']]["type"]."     上傳檔案有問題";

            if(false){
                $str = $_FILES[$init['postname']]["name"]."    不符合要求<br>";
                $str .= "可能的情況是:  <br>";
                $str .= "1.檔案大於5M;<br>";
                $str .= "2.檔案的型別不符合要求    當前的型別是: ".$_FILES[$init['postname']]["type"].";<br>";
                 $str .= "支援的型別有:<br>";
                foreach ($init['filter'] as $value) {
                     $str .= $value."<br>";
                }
            }

            $msg = $str;
        }

        return array('status'=>$status,'msg'=>$msg,'data'=>$data);
    }

使用方法

/**
    *   這裡就是把上傳的引數設定好後傳入  上面的方法中
    */
    $init = array(
            'filter'=>array('image/jpeg'),                 // 過濾型別,預設不過濾
            'postname'=>'p',                     // 前臺上傳的name名稱
            'filedir'=>'../uploads/',                // 要上傳的資料夾
            'filename'=>time().'_'.rand(10000,99999),    // 要上傳的檔名
            'url'=>'http://127.0.0.1/uploads/',     // 預設網路圖片地址
     );
    // 開始上傳檔案
    $res = uploadFile($init);
    // 上傳完成後,檢視上傳的是否正確
    var_dump($res);

感謝檢視,多關注,多評論,謝謝!!