当前位置: 首页 > news >正文

PHP 文件上传

前端:HTML 表单

首先,创建一个 HTML 表单,用于选择并上传文件。这个表单需要包含 enctype="multipart/form-data" 属性,以允许文件上传。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>File Upload</title>
</head><body><h2>Upload a File</h2><form action="upload.php" method="post" enctype="multipart/form-data"><label for="file">Choose file:</label><input type="file" name="file" id="file"><br><br><input type="submit" value="Upload File" name="submit"></form></body></html>

后端:PHP 脚本

然后,创建一个名为 upload.php 的 PHP 文件,用于处理文件上传。

<?php// 检查是否有文件上传if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_FILES['file']) && $_FILES['file']['error'] == 0) {$targetDir = "uploads/"; // 目标文件夹$targetFile = $targetDir . basename($_FILES["file"]["name"]);$uploadOk = 1;$fileType = strtolower(pathinfo($targetFile, PATHINFO_EXTENSION));// 检查文件是否为实际图像或伪图像$check = getimagesize($_FILES["file"]["tmp_name"]);if ($check !== false) {echo "File is an image - " . $check["mime"] . ".";$uploadOk = 1;} else {echo "File is not an image.";$uploadOk = 0;}// 检查文件大小(这里设置为5MB)if ($_FILES["file"]["size"] > 5000000) {echo "Sorry, your file is too large.";$uploadOk = 0;}// 允许的文件格式$allowedTypes = array("jpg", "png", "jpeg", "gif");if (!in_array($fileType, $allowedTypes)) {echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";$uploadOk = 0;}// 检查 $uploadOk 是否设置为0(表示有错误)if ($uploadOk == 0) {echo "Sorry, your file was not uploaded.";// 如果一切正常,尝试上传文件} else {if (move_uploaded_file($_FILES["file"]["tmp_name"], $targetFile)) {echo "The file ". htmlspecialchars(basename($_FILES["file"]["name"])) . " has been uploaded.";} else {echo "Sorry, there was an error uploading your file.";}}
} else {echo "No file was uploaded.";
}?>

结果图:

注意事项

目标文件夹:确保 uploads/ 文件夹存在,并且具有适当的写权限。

文件类型检查:示例代码仅允许上传图像文件(JPG, JPEG, PNG, GIF)。你可以根据需要调整允许的文件类型。

文件大小限制:示例代码限制了文件大小为5MB。你可以根据需求调整这个限制。

安全性:除了检查文件类型和大小,还可以添加更多安全检查,例如验证文件内容、防止文件覆盖等。

错误处理:示例代码包含了一些基本的错误处理。在实际应用中,你可能需要更详细的错误日志和用户反馈。

相关文章:

  • prism
  • MahApps.Metro:专为 WPF 应用程序设计的 UI 框架
  • jmeter提取返回值到文件
  • Python高级爬虫之JS逆向+安卓逆向1.5节: 控制结构
  • 【问题】一招解决vscode输出和终端不一致的困扰
  • 三菱FX5U设置修改删除口令
  • dispaly: inline-flex 和 display: flex 的区别
  • vscode stm32 variable uint32_t is not a type name 问题修复
  • 代码随想录刷题|Day20(组合总数,组合总数2、分割回文串)
  • Python内置函数---all()
  • 「ollama」安装包
  • 开源语音合成模型SparkTTS使用
  • 深入理解 React 组件的生命周期:从创建到销毁的全过程
  • Java性能剖析工具箱
  • dbc文件解析CAN报文注意项
  • 四、探索LangChain:连接语言模型与外部世界的桥梁
  • 模板详细介绍
  • TPshop项目-服务器环境部署(部署环境/服务,检查部署环境/服务,上传TPshop项目到服务器,配置文件的更改,安装TPshop)
  • nodejs使用pkg打包文件
  • DeepSeek在数据仓库的10大应用场景
  • 武大校长:人工智能不存在“过度使用”,武大不会缩减文科
  • 吉利汽车一季度净利润大增264%,称整合极氪后实现整体效益超5%
  • 沪指跌0.68%报3380.82点,创指跌1.92%:券商、军工跌幅靠前
  • 商人运作亿元“茅台酒庞氏骗局”,俩客户自认受害人不服“从犯”判决提申诉
  • “异常”只停留在医院里,用艺术为“泡泡宝贝”加油
  • 专访|茸主:杀回UFC,只为给自己一个交代