登录
首页 >  文章 >  php教程

PHP文件上传教程详解

时间:2026-01-30 13:52:51 409浏览 收藏

从现在开始,我们要努力学习啦!今天我给大家带来《PHP上传文件代码教程》,感兴趣的朋友请继续看下去吧!下文中的内容我们主要会涉及到等等知识点,如果在阅读本文过程中有遇到不清楚的地方,欢迎留言呀!我们一起讨论,一起学习!

在PHP中实现安全文件上传需结合HTML表单与$_FILES变量处理。首先创建含enctype的表单,提交至upload.php;后端设置目标目录并检查其存在性(mkdir创建)。通过getimagesize验证是否为合法图片,防止伪装文件;检查文件是否存在以避免覆盖;限制大小(如5MB);白名单过滤格式(jpg、pdf等)。建议使用finfo获取真实MIME类型,提升安全性;重命名文件为uniqid生成的随机名,防止恶意执行;上传目录禁止脚本运行,并配置PHP允许上传及合理大小限制。最终move_uploaded_file移动临时文件,完成上传。核心是前后端协同与多重校验保障安全。

php上传文件代码

在PHP中实现文件上传功能,主要依赖于HTML表单和PHP的$_FILES超全局变量。下面是一个简单、安全且实用的文件上传示例代码。

1. HTML 表单部分

用户通过这个表单选择要上传的文件:

<form action="upload.php" method="post" enctype="multipart/form-data">
    <label>选择文件:</label>
    &lt;input type=&quot;file&quot; name=&quot;uploadedFile&quot; /&gt;<br><br>
    &lt;input type=&quot;submit&quot; value=&quot;上传文件&quot; /&gt;
</form>

2. PHP 处理文件上传(upload.php)

以下是处理上传的核心PHP代码,包含基本的安全检查:

<?php
$targetDir = "uploads/";  // 指定上传目录
$targetFile = $targetDir . basename($_FILES["uploadedFile"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($targetFile, PATHINFO_EXTENSION));
<p>// 检查目录是否存在,不存在则创建
if (!is_dir($targetDir)) {
mkdir($targetDir, 0777, true);
}</p><p>// 检查是否选择了文件
if (isset($_POST["submit"])) {
$check = getimagesize($_FILES["uploadedFile"]["tmp_name"]);
if ($check !== false) {
echo "文件是图片 - " . $check['mime'] . ".<br>";
$uploadOk = 1;
} else {
echo "文件不是有效图片。<br>";
$uploadOk = 0;
}
}</p><p>// 检查文件是否已存在
if (file_exists($targetFile)) {
echo "抱歉,文件已存在。<br>";
$uploadOk = 0;
}</p><p>// 限制文件大小(例如5MB)
if ($_FILES["uploadedFile"]["size"] > 5000000) {
echo "抱歉,文件太大,不能超过5MB。<br>";
$uploadOk = 0;
}</p><p>// 允许的文件格式
$allowedTypes = array('jpg', 'jpeg', 'png', 'gif', 'pdf', 'docx');
if (!in_array($imageFileType, $allowedTypes)) {
echo "只允许上传 JPG, JPEG, PNG, GIF, PDF, DOCX 文件。<br>";
$uploadOk = 0;
}</p><p>// 如果一切检查通过,则上传文件
if ($uploadOk == 1) {
if (move_uploaded_file($_FILES["uploadedFile"]["tmp_name"], $targetFile)) {
echo "文件 ". htmlspecialchars(basename($_FILES["uploadedFile"]["name"])) . " 上传成功。";
} else {
echo "上传过程中发生错误。";
}
} else {
echo "文件上传被拒绝。";
}
?></p>

3. 安全建议与注意事项

  • 不要依赖文件扩展名判断类型:使用 finfo 函数检测MIME类型更安全。
  • 重命名上传文件:避免覆盖或执行恶意脚本,可使用 uniqid() 生成新文件名。
  • 禁止执行权限:上传目录不要放在可执行PHP的位置,或通过服务器配置禁用脚本执行。
  • 验证表单来源:防止CSRF攻击,可加入Token验证。
  • 设置PHP配置:确保 file_uploads = On,并合理设置 upload_max_filesizepost_max_size

4. 改进建议:更安全的文件名处理

推荐将文件名改为随机名称以提高安全性:

$newFileName = uniqid('file_', true) . '.' . $imageFileType;
$targetFile = $targetDir . $newFileName;

基本上就这些。一个完整的文件上传功能需要前端配合、后端验证和服务器安全设置三者结合,才能保障可用性和安全性。

终于介绍完啦!小伙伴们,这篇关于《PHP文件上传教程详解》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布文章相关知识,快来关注吧!

前往漫画官网入口并下载 ➜
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>