今天改進了下旗下幾個網站的檔案上傳系統,順便發點東西。
全php代碼,無js,檔案類型根據尾碼名判斷,非mime判斷。
建立個up.php,代碼如下:
| 代碼如下 |
複製代碼 |
<?php $uptype=array("jar","zip"); //允許上傳檔案類型 $max_file_size=20480000; //上傳檔案大小限制, 單位BYTE $path_parts=pathinfo($_SERVER['PHP_SELF']); //取得當前路徑 $destination_folder="files/"; //上傳檔案路徑 $name="MuXi_".date("Y-m-d_H-i-s"); //儲存檔案名稱 if($_SERVER['REQUEST_METHOD'] == 'POST') { $file = $_FILES["upload_file"]; if(!is_uploaded_file($file["tmp_name"])) //是否存在檔案 { echo "檔案不存在!"; exit; } $torrent = explode(".", $file["name"]); $fileend = end($torrent); $fileend = strtolower($fileend); if(!in_array($fileend, $uptype)) //檢查上傳檔案類型 { echo"不允許上傳此類型檔案!"; exit; } if($max_file_size < $file["size"]) //檢查檔案大小 { echo "檔案太大,超過上傳限制!"; exit; } if(!file_exists($destination_folder)) mkdir($destination_folder); $filename=$file["tmp_name"]; $image_size = getimagesize($filename); $pinfo=pathinfo($file["name"]); $ftype=$pinfo[extension]; $destination = $destination_folder.$name.".".$ftype; if(file_exists($destination) && $overwrite != true) { echo "同名檔案已經存在了!"; exit; } if(!move_uploaded_file ($filename, $destination)) { echo "移動檔案出錯!"; exit; } $pinfo=pathinfo($destination); $fname=$pinfo[basename]; echo "上傳成功!"; } ?> |
調用代碼:
| 代碼如下 |
複製代碼 |
<form action="up.php" method="post" enctype="multipart/form-data"> <input type="file" name="upload_file" /> <input type="submit" value="上傳" />
|
用mime類型限制有局限性,有些檔案在上傳是不是正常本身的mime,導致上傳不成功,而用尾碼名限制可以很好的解決這個問題。