PHP - 文件上传

你好,有抱负的PHP开发者们!今天,我们将一起探索使用PHP进行文件上传的精彩世界。作为你友好的计算机老师邻居,我将一步一步地引导你完成这个旅程。所以,拿起你最喜欢的饮料,舒适地坐好,让我们一起开始这次文件上传的冒险吧!

PHP - File Uploading

理解文件上传

在我们跳入代码之前,让我们花点时间来理解一下文件上传是怎么回事。想象你正在给朋友写信。你写完信,把它放进信封,然后通过邮政服务发送。文件上传和这非常相似!只不过你发送的不是信,而是从你的电脑到一个网络服务器的文件(比如图片或文档)。

创建文件上传表单

我们文件上传旅程的第一步是创建一个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>

让我们分解一下:

  1. action="upload.php": 这告诉表单数据应该发送到哪里。在这个案例中,我们将创建一个名为upload.php的PHP脚本来处理文件上传。
  2. method="post": 这指定我们使用POST方法发送数据。
  3. enctype="multipart/form-data": 这非常关键!它告诉表单我们发送的不只是文本——我们还在发送文件。
  4. <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;
}

// 检查是否有错误导致$uploadOk设置为0
if ($uploadOk == 0) {
echo "抱歉,您的文件没有被上传。";
// 如果一切顺利,尝试上传文件
} else {
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
echo "文件 " . basename( $_FILES["fileToUpload"]["name"]). " 已上传。";
} else {
echo "抱歉,上传您的文件时发生错误。";
}
}
}
?>

哇,这么多代码!别担心,我们会一步一步分解:

  1. 首先,我们检查表单是否已经提交,使用isset($_POST["submit"])
  2. 我们设置了一些变量:
  • $target_dir: 我们将存储上传文件的目录。
  • $target_file: 上传文件的完整路径。
  • $uploadOk: 一个标志,用来跟踪是否可以上传文件。
  • $imageFileType: 上传文件的扩展名。
  1. 我们进行了一些检查:
  • 文件是否已经在我们的上传文件夹中?
  • 文件是否太大?
  • 文件类型是否被允许?
  1. 如果这些检查中的任何一个失败,我们会将$uploadOk设置为0。

  2. 最后,如果一切正常($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脚本,包括错误检查和文件类型限制。

记住,如果处理不当,文件上传可能会带来安全风险。始终验证和清理用户输入,限制文件类型和大小,并将上传的文件存储在一个不能直接通过Web浏览器访问的目录中。

在我们结束这个课程时,我想起了一个学生,他曾经在一个用于个人照片的网站上上传了一个1GB的视频文件。不用说,服务器的情况并不好!所以,设置文件大小限制是非常重要的!

继续练习,继续编码,最重要的是,继续在PHP中享受乐趣!下次见,快乐上传!

Credits: Image by storyset