finfo_file
是 PHP 中的一個函數,它用于檢測文件的 MIME 類型。在文件上傳中,這個函數可以幫助我們確保上傳的文件是允許的類型,從而提高安全性。
以下是如何在文件上傳中使用 finfo_file
的示例:
<!DOCTYPE html>
<html>
<head>
<title>File Upload</title>
</head>
<body>
<form action="upload.php" method="post" enctype="multipart/form-data">
Select file to upload:
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="Upload File" name="submit">
</form>
</body>
</html>
upload.php
的 PHP 文件,用于處理文件上傳:<?php
// 定義允許的文件類型
$allowedMimeTypes = [
'image/jpeg',
'image/png',
'image/gif'
];
// 檢查是否有文件上傳
if (isset($_FILES['fileToUpload'])) {
// 獲取文件信息
$file = $_FILES['fileToUpload'];
// 創建一個新的 finfo 對象
$finfo = new finfo(FILEINFO_MIME_TYPE);
// 獲取文件的 MIME 類型
$mimeType = $finfo->file($file['tmp_name']);
// 檢查文件的 MIME 類型是否在允許的類型列表中
if (in_array($mimeType, $allowedMimeTypes)) {
// 將文件移動到指定目錄
$targetDir = "uploads/";
$targetFile = $targetDir . basename($file["name"]);
if (move_uploaded_file($file["tmp_name"], $targetFile)) {
echo "The file " . basename($file["name"]) . " has been uploaded.";
} else {
echo "Sorry, there was an error uploading your file.";
}
} else {
echo "Sorry, only JPEG, PNG, and GIF files are allowed.";
}
} else {
echo "No file was uploaded.";
}
?>
在這個示例中,我們首先定義了一個包含允許的 MIME 類型的數組。然后,我們檢查是否有文件上傳,并使用 finfo_file
函數獲取文件的 MIME 類型。接著,我們檢查文件的 MIME 類型是否在允許的類型列表中。如果是,則將文件移動到指定目錄;否則,顯示錯誤消息。