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()
函数将其从临时目录移动到永久位置。