PHP 檔案上傳
使用 PHP,可以輕鬆地將檔案上傳到伺服器。
但是,方便伴隨著危險,所以在允許檔案上傳時務必小心!
配置 "php.ini" 檔案
首先,確保 PHP 已配置為允許檔案上傳。
在你的 "php.ini" 檔案中,搜尋 file_uploads
指令,並將其設定為 On
file_uploads = On
建立 HTML 表單
接下來,建立一個 HTML 表單,允許使用者選擇他們想要上傳的影像檔案。
<!DOCTYPE html>
<html>
<body>
<form action="upload.php" method="post" enctype="multipart/form-data">
選擇要上傳的圖片
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="上傳圖片" name="submit">
</form>
</body>
</html>
上面的 HTML 表單需要遵循的一些規則
- 確保表單使用 method="post"
- 表單還需要具有以下屬性:enctype="multipart/form-data"。它指定了在提交表單時要使用的內容型別。
如果缺少上述要求,檔案上傳將無法工作。
其他需要注意的事項
- <input> 標籤的 type="file" 屬性將輸入欄位顯示為檔案選擇控制元件,旁邊還有一個 "瀏覽" 按鈕。
上面的表單會將資料傳送到名為 "upload.php" 的檔案,我們將在下一步建立它。
建立上傳檔案的 PHP 指令碼
"upload.php" 檔案包含上傳檔案的程式碼。
<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// 檢查檔案是否為實際的影像檔案或偽影像
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if($check !== false) {
echo "檔案是影像 - " . $check["mime"] . ".";
$uploadOk = 1;
} else {
echo "檔案不是影像。";
$uploadOk = 0;
}
}
?>
PHP 指令碼說明
- $target_dir = "uploads/" - 指定檔案將被放置的目錄。
- $target_file 指定要上傳檔案的路徑。
- $uploadOk=1 尚未被使用(稍後將使用)。
- $imageFileType 儲存檔案的副檔名(小寫)。
- 接下來,檢查檔案是否為實際的影像檔案或偽影像。
注意:你需要在 "upload.php" 檔案所在的目錄中建立一個名為 "uploads" 的新目錄。上傳的檔案將儲存在那裡。
檢查檔案是否已存在
現在我們可以新增一些限制。
首先,我們將檢查檔案是否已存在於 "uploads" 資料夾中。如果存在,將顯示一條錯誤訊息,$uploadOk 將被設定為 0。
// 檢查檔案是否已存在
if (file_exists($target_file)) {
echo "抱歉,檔案已存在。";
$uploadOk = 0;
}
限制檔案大小
我們上面 HTML 表單中的檔案輸入欄位名為 "fileToUpload"。
現在,我們要檢查檔案大小。如果檔案大於 500KB,將顯示一條錯誤訊息,$uploadOk 將被設定為 0。
// 檢查檔案大小
if ($_FILES["fileToUpload"]["size"] > 500000) {
echo "抱歉,你的檔案太大。";
$uploadOk = 0;
}
限制檔案型別
下面的程式碼只允許使用者上傳 JPG、JPEG、PNG 和 GIF 檔案。所有其他檔案型別都會在將 $uploadOk 設定為 0 之前顯示錯誤訊息。
// 允許某些檔案格式
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
echo "抱歉,只允許上傳 JPG、JPEG、PNG 和 GIF 檔案。";
$uploadOk = 0;
}
完整的上傳檔案 PHP 指令碼
"upload.php" 的完整檔案現在如下所示:
<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// 檢查檔案是否為實際的影像檔案或偽影像
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if($check !== false) {
echo "檔案是影像 - " . $check["mime"] . ".";
$uploadOk = 1;
} else {
echo "檔案不是影像。";
$uploadOk = 0;
}
}
// 檢查檔案是否已存在
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;
}
// 檢查 $uploadOk 是否因錯誤而設定為 0
if ($uploadOk == 0) {
echo "抱歉,你的檔案未能上傳。";
// 如果一切正常,則嘗試上傳檔案
} else {
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
echo "檔案 ". htmlspecialchars( basename( $_FILES["fileToUpload"]["name"])). " 已上傳。";
} else {
echo "抱歉,上傳檔案時出錯。";
}
}
?>
完整的 PHP 檔案系統參考
有關檔案系統函式的完整參考,請訪問我們的完整 PHP 檔案系統參考。