PHP - 檔案上傳
你好,有抱負的PHP開發者們!今天,我們將要進入使用PHP進行檔案上傳的精彩世界。作為你們親切友善的電腦老師,我會帶領你們一步步走過這個旅程。所以,拿起你們最喜歡的飲料,放鬆心情,讓我們一起踏上這次檔案上傳的冒險吧!
了解檔案上傳
在我們投入程式碼之前,讓我們先來了解什麼是檔案上傳。想像你正在給朋友寄一封信。你寫信,將它放入信封,然後通過郵政服務寄出。檔案上傳與此非常相似!不過你傳送的不是信件,而是從你的電腦傳送一個檔案(如圖片或文件)到網頁伺服器。
創建檔案上傳表單
在我們的檔案上傳旅程中,第一步是創建一個HTML表單,讓用戶選擇並上傳檔案。將這個表單想像成我們用來寄信的信封。
讓我們創建一個簡單的HTML表單:
<form action="upload.php" method="post" enctype="multipart/form-data">
選擇要上傳的圖片:
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="上傳圖片" name="submit">
</form>
讓我們分解一下:
-
action="upload.php"
: 這告訴表單要將數據發送到哪裡。在這個例子中,我們將創建一個名為upload.php
的PHP腳本來處理檔案上傳。 -
method="post"
: 這指定我們使用POST方法發送數據。 -
enctype="multipart/form-data"
: 這非常關鍵!它告訴表單我們不僅僅是發送文字——我們還在發送一個檔案。 -
<input type="file">
: 這創建一個按鈕,讓用戶從他們的電腦中選擇一個檔案。
創建上傳腳本
現在我們有了表單,我們需要創建一個PHP腳本来處理檔案上傳。這就是魔術發生的地方!
讓我們創建我們的 upload.php
檔案:
<?php
if(isset($_POST["submit"])) {
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// 檢查檔案是否已存在
if (file_exists($target_file)) {
echo "對不起,檔案已存在。";
$uploadOk = 0;
}
// 檢查檔案大小
if ($_FILES["fileToUpload"]["size"] > 500000) {
echo "對不起,你的檔案太大。";
$uploadOk = 0;
}
// 允許某些檔案格式
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
echo "對不起,只允許JPG、JPEG、PNG & GIF檔案格式。";
$uploadOk = 0;
}
// 檢查是否有錯誤發生
if ($uploadOk == 0) {
echo "對不起,你的檔案沒有被上傳。";
// 如果一切正常,嘗試上傳檔案
} else {
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
echo "檔案 " . basename( $_FILES["fileToUpload"]["name"]) . " 已經被上傳。";
} else {
echo "對不起,上傳你的檔案時發生錯誤。";
}
}
}
?>
哇,這可是很多的代碼!別擔心,我們會一步步分解:
- 首先,我們檢查表單是否已經被提交,使用
isset($_POST["submit"])
。 - 我們設置一些變量:
-
$target_dir
: 我們將存儲上傳檔案的目錄。 -
$target_file
: 上傳檔案的全路径。 -
$uploadOk
: 一個標誌,用來跟蹤是否可以上傳檔案。 -
$imageFileType
: 上傳檔案的副檔名。
- 我們進行一些檢查:
- 檔案是否已在我們的上傳目錄中?
- 檔案是否太大?
- 檔案類型是否允許?
-
如果這些檢查中的任何一個失敗,我們將
$uploadOk
設為 0。 -
最後,如果一切正常 (
$uploadOk == 1
),我們使用move_uploaded_file()
函數將上傳的檔案從它的臨時位置移動到我們的上傳目錄。
常用的檔案上傳方法
這裡是一個PHP檔案上傳中常用的方法表格:
方法 | 描述 |
---|---|
$_FILES["file"]["name"] |
客戶端機器上原始的檔案名稱 |
$_FILES["file"]["type"] |
檔案的MIME類型 |
$_FILES["file"]["size"] |
檔案的大小,以位元組為單位 |
$_FILES["file"]["tmp_name"] |
存储在伺服器上的檔案的臨時文件名 |
$_FILES["file"]["error"] |
這個檔案上傳的錯誤代碼 |
move_uploaded_file() |
將上傳的檔案移動到新位置 |
結論
好了,各位!我們已經創建了一個表單,讓用戶選擇檔案,並且一個PHP腳本來處理上傳過程,包括錯誤檢查和檔案類型限制。
記住,如果不正確處理,檔案上傳可能會成為安全風險。總是驗證和清潔用戶輸入,限制檔案類型和大小,並將上傳的檔案存儲在一個不能直接通過網頁瀏覽器訪問的目錄中。
在我們結束這個課程時,我回想起一個學生曾經在一個用於個人頭像的網站上傳了一個1GB的視頻檔案。可想而知,對伺服器來說並不是一件好事!所以,千萬記得設置那些檔案大小限制!
繼續練習,繼續編程,最重要的是,繼續享受PHP的樂趣!下次見,快樂上傳!
Credits: Image by storyset