PHP 上傳檔案建置/限制檔案大小及類型/控制可選擇的文件類型
網頁上傳檔案的建置,主要須有一個上傳頁面 (html 即可),及一個後端的 PHP 處理程式頁。此為笨兔自己記錄參考用,若有需者就參考!若有錯誤或其它方法,請自行更正唄!
<html>
<head>
<meta charset="utf-8">
<title>PHP 上傳檔案建置</title>
</head>
<body>
<form action="html_055_1.php" method="post" enctype="multipart/form-data"> 檔案名稱:<input type="file" name="myfile"><br>
<input type="submit" name="submit" value="上傳檔案">
</form> </body> </html>
<?php
if ($_FILES["myfile"]["error"] > 0){
echo "Error: " . $_FILES["myfile"]["error"];
}else{
echo "檔案名稱: " . $_FILES["myfile"]["name"]."<br>";
echo "檔案類型: " . $_FILES["myfile"]["type"]."<br>";
echo "檔案大小: " . ($_FILES["myfile"]["size"] / 1024)." Kb<br>";
echo "暫存名稱: " . $_FILES["myfile"]["tmp_name"];
}
if (file_exists("test/" . $_FILES["myfile"]["name"])){ //檢查資料夾內是否有同檔名存在。若要覆蓋就不要設此判斷式
echo "檔案已經存在,請勿重覆上傳相同檔案";
}else{
move_uploaded_file($_FILES["myfile"]["tmp_name"],"test/".$_FILES["myfile"]["name"]); //將檔案從暫存資料夾以同名稱移到網站資料夾中
}
?>
您可任意上傳一個檔案看看。此範例結果主要讓您看看大約的畫面,笨兔在網站上沒有設存放檔案的資料夾,所以會出現 move_uploaded_file() 錯誤訊息,也不會判斷檔案是否重覆!
PHP 限制上傳檔案大小
PHP 限制上傳檔案大小有二個地方,一是伺服器本身的設定,一是在上傳網頁加入 <input> 來做設定。
; 單一檔案上傳大小上限 upload_max_filesize = 50M ; POST 所有檔案加總大小上限 post_max_size = 200M ; 記憶體用量上限 memory_limit = 512M ※以上三個設定基本原則需 記憶體用量上限>POST 所有檔案加總大小上限>單一檔案上傳大小上限 ※以下幾個設定,可預防上傳太久而被中斷 ; PHP 指令稿執行時間上限(秒) max_execution_time = 600 ; PHP 指令稿解析輸入資料時間上限(秒) max_input_time = 600 ; socket 等待逾時(秒) default_socket_timeout = 600 ; MySQL 資料庫連線逾時(秒),-1 代表永不斷線 mysql.connect_timeout = -1
<html>
<head>
<meta charset="utf-8">
<title>PHP 上傳檔案建置</title>
</head>
<body>
<form action="html_055_1.php" method="post" enctype="multipart/form-data"> <input type="hidden" name="max_file_size" value="1024"> 檔案名稱:<input type="file" name="myfile"><br>
<input type="submit" name="submit" value="上傳檔案">
</form> </body> </html>
※ 此範例用上面的範例來增加限制檔案大小只有 1024byte(1K) ,所以您可任意上傳一個檔案,在後端處理程式 (html_055_1.php) 就會超過,出現錯誤代碼 2 了。
PHP 指定上傳檔案類型
在 <input type="file" ... > 內使用 accept 屬性,指定使用者上傳的檔案類型。也就是點選『瀏覽』後,出現選擇檔案時的文件類型,只顯示指定類型的檔案。如下圖(指定 pdf 檔):
<html>
<head>
<meta charset="utf-8">
<title>PHP 上傳檔案建置</title>
</head>
<body>
<form action="html_055_1.php" method="post" enctype="multipart/form-data"> <input type="hidden" name="max_file_size" value="1024"> 檔案名稱:<input type="file" name="myfile" accept=".pdf"><br>
<input type="submit" name="submit" value="上傳檔案">
</form> </body> </html>
※ 此用上面限制檔案大小只有 1024byte(1K) 來展示,所以若上傳就會出現錯誤代碼 2 了。
※ 使用 accept 屬性的方法,只是一開始顯示指定類型的檔案,若 User 自行去改檔案類型,還是可以上傳其它類型的檔案。
※ 按下『瀏覽』後,即可看見檔案類型為指定的 pdf 囉!
accept 指定方法說明:
※ 附註 ※
若要強制只能上傳某種類型檔案,不能讓 USER 更改,就必須在上傳檔案前,寫 JavaScript 來檢查檔案格式 (副檔名) 做判斷。或在後端處理時,以 $_FILES["名稱"]["type"] 來判斷唄!這就自行努力囉!兩者差別在於寫在後端必須上傳到暫存區後才能做判斷,所以較為耗時唄!