1. 程式人生 > >PHP檔案上傳-面向物件的方法(MVC模式)

PHP檔案上傳-面向物件的方法(MVC模式)

首先控制器:

<?php
    header("Content-type:text/html;charset=utf8");
    require_once("upload.class.php");
    //獲取獲取檔案的字尾名
    $temp = explode(".",$_FILES['file']['name']);
    $ext = end($temp);//獲取陣列最後一個元素
    //獲取檔案的大小、位元組
    $size = $_FILES['file']['size'];
    //獲取檔案格式
    $formats = $_FILES['file']['type'];
    //獲取上傳錯誤資訊
    $err = $_FILES["file"]["error"];
    //獲取檔名
    $filename = $_FILES['file']['name'];
    //獲取檔案臨時儲存位置
    $stored = $_FILES["file"]["tmp_name"];
    $service = new upload();
    $res = $service->getFile($ext,$size,$formats,$err,$filename,$stored);
    echo $res;
?>

呼叫的模型,也就是封裝的類

<?php
    header("Content-type:text/html;charset=utf8");
    class Upload {
        public $max_size=2097152;
        public $types=array("gif", "jpeg", "jpg", "png");
        //判斷檔案型別是否正確
        public function getFile ($type,$size,$format,$err,$filename,$stored) {
            if (!in_array($type,$this->types)) {
                return false;
            }
            if ($size > $this->max_size) {
                return false;
            }
            if ($format=="image/gif" || $format=="image/jpeg" || $format=="image/jpg" || $format=="image/pjpeg" || $format=="image/x-png" || $format=="image/png") {
                if ($err > 0) {
                    return "上傳有誤!".$err;
                }
                if (file_exists("upload/".$filename)) {
                    return "此檔案已經存在!";
                } else {
                    move_uploaded_file($stored,"upload/".$filename);
                    return "檔案上傳成功,檔案所在目錄:upload/".$filename;
                }
            } else {
                return "非法的檔案格式!";
            }
            exit();
        }  
    }
?>

這其中,有些資料是可以動態的,比如:上傳限制的檔案大小

使用流程:

1、view層,一個上傳的靜態頁面,上傳的時候提交到控制器

2、控制器在去呼叫模型,使得十分靈活