iT邦幫忙

2021 iThome 鐵人賽

DAY 25
0
自我挑戰組

HTML、 PHP CRUD 自我學習系列 第 25

第25天 - 文件審核系統(3)_上傳、下載的部分

  • 分享至 

  • xImage
  •  

今天上傳、下載的程式碼要參考昨天的文章(標籤裡的name值)
https://ithelp.ithome.com.tw/articles/10271046

下面是上傳檔案的程式碼,檔案都會上傳到我專案資料夾底下的"uploads資料夾"
並在"uploads資料夾"底下再新增以帳號命名的資料夾 <<檔案就上傳在這。

裡面有幾個 $_FILES 開頭的程式碼,其實我都不太熟(很少用到它)

<?php
/*按下"點我上傳" 新增以帳號命名的資料夾*/
if(isset($_POST['COOK']))
{
    //帳號名稱的資料夾 放在 "uploads/" 底下
    $dirname = "uploads/".$_SESSION['auth_user']['user_id'];
    if (!is_dir($dirname)) 
    {
        mkdir($dirname);
    }
}

//下面的 $DE 是我對語法不熟(不知該怎麼用單雙引號、dot),為了方便後續撰寫
$DE = $_SESSION['auth_user']['user_id'];

/*上傳檔案:限制大小(10MB)、檔案類型(限定pdf)*/
@$img_size = $_FILES['stu_img']['size'];//變數前面的"@"是用來關閉警告提示
@$error = $_FILES['stu_img']['error'];
if ($error === 0 && $AA !="") 
{
    if ($img_size > 10485760)//限制檔案大小
    {
        $_SESSION['status'] = "注意!! 檔案過大 (最多 10MB)";
        header("Location: index2.php");
    }
    else
    {
        if(isset($_POST['save_stu_img']))
        {
            $doc_type = @$_COOKIE["COOK01"];
            // $phone = $_POST['stu_phone'];
            $iamege = $_FILES['stu_img']['name'];

            $allowed_exttension = array('pdf','PDF');
            $filename_ex = $_FILES['stu_img']['name'];
            $file_exttension = pathinfo($filename_ex ,PATHINFO_EXTENSION);
            if(!in_array($file_exttension,$allowed_exttension))
            {
                $_SESSION['status'] = "檔案限定 : pdf";
                header('Location: index2.php');
            }
            else
            {
                $FFILE = $_FILES['stu_img']['tmp_name'];
                $DDEST = "uploads/$DE/".$_FILES["stu_img"]["name"];

                //擋掉重複檔名的檔案,指定資料夾.你的檔案
                if(file_exists("uploads/$DE/".$iamege = $_FILES['stu_img']['name']))
                {
                    $filename = $_FILES['stu_img']['name'];
                    $_SESSION['status'] = "有相同名稱的檔案存在 :   ".$filename;
                    header('Location: index2.php');
                }
                else
                {
                    $query = "INSERT INTO document(stu_img,id,doc_type)
                              VALUES('$iamege','".$_SESSION['auth_user']['user_id']."','$doc_type')";
                    $query_run = mysqli_query($con,$query);

                    if($query_run)
                    {
                        move_uploaded_file($FFILE,$DDEST);
                        $_SESSION['status'] = "檔案上傳成功!";
                        setcookie("COOK01","", time()-1200);
                        header('Location: index2.php');
                    }
                    else
                    {
                        $_SESSION['status'] = "檔案上傳失敗!!!!!!";
                        header('Location: index2.php');
                    }
                }
            }	
        }
    }
}
?>

下載的程式碼(有兩個部分,可搭配昨天列印)
首先是【a標籤】使用超連結下載

<a href="index2.php?downl_file=<?php echo $row['stu_img'] ?>">
    <?php echo $row['stu_img']; ?>
</a>

再來是下載本身的程式碼

<?php
/*下載*/
if(!empty($_GET['downl_file'])){
    $fileName  = basename($_GET['downl_file']);
    $filePath  = "uploads/$DE/".$fileName;

    if(!empty($fileName) && file_exists($filePath)){
        //define header
        header("Cache-Control: public");
        header("Content-Description: File Transfer");
        header("Content-Disposition: attachment; filename=$fileName");
        header("Content-Type: application/zip");
        header("Content-Transfer-Encoding: binary");
        ob_clean();//防止檔案損毀1
        flush();//防止檔案損毀2
        readfile($filePath);
        exit;
    }
    else{
        echo "檔案不存在";
    }
}
?>

下次再弄刪除檔案(因為昨天列印的部分沒有弄到這一塊)
今天先這樣,下次見。


上一篇
第24天 - 文件審核系統(2)_列印呈現的部分
下一篇
第26天 - 文件審核系統(4)_刪除檔案的部分
系列文
HTML、 PHP CRUD 自我學習30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言