PHP:上傳檔案處理

在 html 用下面的code 創造一個上傳檔案的欄位跟按鈕來input

<form action="upload_file.php" method="post"
enctype="multipart/form-data">

<input type="file" name="uploadFile">

<input type="submit" name="submit" value="上傳"></form>

等到整個 form 換頁送出後, 就可以取得上傳檔案的資訊或是對收到的檔案 執行一些操作,包括:

$_FILES[“uploadFile"][“name"]  <- 取得上傳檔案的原名稱
$_FILES[“uploadFile"][“type"] <- 取得上傳檔案的MIME類型,例如:"image/gif"
$_FILES[“uploadFile"][“size"] <- 取得上傳檔案的大小,單位是bit
$_FILES[“uploadFile"][“tmp_name"] <- 取得上傳檔案存在server的暫時名稱
$_FILES[“uploadFile"][“error"] <- 取得上傳檔案的錯誤代碼

error code :

0 : 上傳成功
1 : 超過 php.ini 指定的檔案大小
2 : 超過 MAX_FILE_SIZE 指定的大小
3 : 只上傳了一部分
4 : 沒有東西被上傳
5 : 上傳大小為 0 bit

操作則常用的包括移動檔案、重新命名等等

*移動把檔案存檔

move_uploaded_file($_FILES["uploadFile"]["tmp_name"], "/目的地".$_FILES["uploadFile"]["name"]);

*重新命名

rename("/檔案所在目錄".$_FILES["uploadFile"]["name"], "/檔案所在目錄".$filename);

* $filename可以用隨機md5來產生32位的不規則檔名

$filename = md5(uniqid(rand()));

*檔案限制

列出允許的類型array

$allowedExts = array("gif", "jpeg", "jpg", "png");

explode把檔名跟副檔名用 " . “分開
end選取array最後一個元素也就是副檔名

$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);

如果type MIME是允許的,in_array確定副檔名也在允許array中,也在設定size內就可以開始做前面提到的存檔、改名等
用||設定或許條件、&&設定必需條件

if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 20000)
&& in_array($extension, $allowedExts))

更詳細的細節
可以參考w3schools的這篇
http://www.w3schools.com/php/php_file_upload.asp

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s