PHP 檔案上傳
在本教程中,你將學習如何使用 PHP 將檔案上載到遠端 Web 伺服器。
使用 PHP 上傳檔案
在本教程中,我們將學習如何使用 Simple HTML 表單和 PHP 在遠端伺服器上上載檔案。你可以上傳任何型別的檔案,如影象,視訊,ZIP 檔案,Microsoft Office 文件,PDF,以及可執行檔案和各種其他檔案型別。
第 1 步:建立 HTML 表單以上傳檔案
以下示例將建立一個可用於上載檔案的簡單 HTML 表單。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>File Upload Form</title>
</head>
<body>
<form action="upload-manager.php" method="post" enctype="multipart/form-data">
<h2>Upload File</h2>
<label for="fileSelect">Filename:</label>
<input type="file" name="photo" id="fileSelect">
<input type="submit" name="submit" value="Upload">
<p><strong>Note:</strong> Only .jpg, .jpeg, .gif, .png formats allowed to a max size of 5 MB.</p>
</form>
</body>
</html>
注意: 除了檔案選擇欄位外,上載表單還必須使用 post
方法,並且必須包含 enctype="multipart/form-data"
屬性。此屬性確保表單資料被編碼為多個 MIME 資料 - 這是上載大量二進位制資料(如檔案)所必需的。
第 2 步:處理上傳的檔案
這是我們的 upload-manager.php
檔案的完整程式碼。這將上傳檔案儲存在 upload
資料夾,並能實現一些基本的安全檢查,如檔案型別,檔案大小,以確保使用者上傳正確的檔案型別和允許的範圍內。
<?php
// Check if the form was submitted
if($_SERVER["REQUEST_METHOD"] == "POST"){
// Check if file was uploaded without errors
if(isset($_FILES["photo"]) && $_FILES["photo"]["error"] == 0){
$allowed = array("jpg" => "image/jpg", "jpeg" => "image/jpeg", "gif" => "image/gif", "png" => "image/png");
$filename = $_FILES["photo"]["name"];
$filetype = $_FILES["photo"]["type"];
$filesize = $_FILES["photo"]["size"];
// Verify file extension
$ext = pathinfo($filename, PATHINFO_EXTENSION);
if(!array_key_exists($ext, $allowed)) die("Error: Please select a valid file format.");
// Verify file size - 5MB maximum
$maxsize = 5 * 1024 * 1024;
if($filesize > $maxsize) die("Error: File size is larger than the allowed limit.");
// Verify MYME type of the file
if(in_array($filetype, $allowed)){
// Check whether file exists before uploading it
if(file_exists("upload/" . $_FILES["photo"]["name"])){
echo $_FILES["photo"]["name"] . " is already exists.";
} else{
move_uploaded_file($_FILES["photo"]["tmp_name"], "upload/" . $_FILES["photo"]["name"]);
echo "Your file was uploaded successfully.";
}
} else{
echo "Error: There was a problem uploading your file. Please try again.";
}
} else{
echo "Error: " . $_FILES["photo"]["error"];
}
}
?>
你可能想知道這段程式碼到底是什麼。好吧,讓我們逐個瀏覽這個示例程式碼的每個部分,以便更好地理解。
程式碼說明
提交表單後,可以通過 PHP 超全域性陣列 $_FILES
訪問有關上傳檔案的資訊。例如,我們的上傳表單包含一個名為 photo(即 name="photo"
) 的檔案選擇欄位,如果任何使用者使用此欄位上傳檔案,我們可以獲取其詳細資訊,如名稱,型別,大小,臨時名稱或嘗試上載時發生的任何錯誤通過 $_FILES["photo"]
關聯陣列,像這樣:
$_FILES["photo"]["name"]
- 此陣列值指定檔案的原始名稱,包括副檔名。它不包括檔案路徑。$_FILES["photo"]["type"]
- 此陣列值指定檔案的 MIME 型別。$_FILES["photo"]["size"]
- 此陣列值指定檔案大小(以位元組為單位)。$_FILES["photo"]["tmp_name"]
- 此陣列值指定臨時名稱,包括將檔案上載到伺服器後分配給該檔案的完整路徑。$_FILES["photo"]["error"]
- 此陣列值指定與檔案上載關聯的錯誤或狀態程式碼,例如,如果沒有錯誤,它將為 0。
以下示例中的 PHP 程式碼僅顯示上載檔案的詳細資訊,並將其儲存在伺服器上的臨時目錄中。
<?php
if($_FILES["photo"]["error"] > 0){
echo "Error: " . $_FILES["photo"]["error"] . "<br>";
} else{
echo "File Name: " . $_FILES["photo"]["name"] . "<br>";
echo "File Type: " . $_FILES["photo"]["type"] . "<br>";
echo "File Size: " . ($_FILES["photo"]["size"] / 1024) . " KB<br>";
echo "Stored in: " . $_FILES["photo"]["tmp_name"];
}
?>
提示: 檔案成功上載後,會自動儲存在伺服器上的臨時目錄中。要使用此檔案或永久儲存它,你需要使用 PHP 的 move_uploaded_file()
函式將其從臨時目錄移動到永久位置。