当前位置:首页 > PHP

php实现上传

2026-02-27 11:16:50PHP

文件上传基础实现

使用PHP处理文件上传需要结合HTML表单和PHP脚本。以下是一个基础实现示例:

HTML表单部分(index.html):

<form action="upload.php" method="post" enctype="multipart/form-data">
    <input type="file" name="fileToUpload" id="fileToUpload">
    <input type="submit" value="Upload" name="submit">
</form>

PHP处理脚本(upload.php):

php实现上传

$targetDir = "uploads/";
$targetFile = $targetDir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($targetFile,PATHINFO_EXTENSION));

// 检查文件是否已存在
if (file_exists($targetFile)) {
    echo "文件已存在";
    $uploadOk = 0;
}

// 限制文件大小(5MB)
if ($_FILES["fileToUpload"]["size"] > 5000000) {
    echo "文件过大";
    $uploadOk = 0;
}

// 允许特定文件格式
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg") {
    echo "只允许JPG, JPEG, PNG文件";
    $uploadOk = 0;
}

// 检查$uploadOk是否为0
if ($uploadOk == 0) {
    echo "文件未上传";
} else {
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $targetFile)) {
        echo "文件". htmlspecialchars(basename($_FILES["fileToUpload"]["name"])). "已上传";
    } else {
        echo "上传过程中出错";
    }
}

安全增强措施

为防止安全风险,建议添加以下防护措施:

// 检查是否为真实图片(防止伪装图片)
if(isset($_POST["submit"])) {
    $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
    if($check === false) {
        echo "文件不是有效的图片";
        $uploadOk = 0;
    }
}

// 限制文件扩展名
$allowedExtensions = ['jpg', 'jpeg', 'png', 'gif'];
if(!in_array($imageFileType, $allowedExtensions)) {
    echo "不允许的文件类型";
    $uploadOk = 0;
}

// 生成唯一文件名防止覆盖
$newFileName = uniqid().'.'.$imageFileType;
$targetFile = $targetDir . $newFileName;

多文件上传处理

处理多个文件上传需要遍历$_FILES数组:

php实现上传

foreach($_FILES['files']['name'] as $key=>$val) {
    $fileName = basename($_FILES['files']['name'][$key]);
    $targetFilePath = $targetDir . $fileName;

    if(move_uploaded_file($_FILES['files']['tmp_name'][$key], $targetFilePath)) {
        echo "文件 {$fileName} 上传成功<br>";
    }
}

HTML表单需要添加multiple属性:

<input type="file" name="files[]" multiple>

文件上传配置

PHP.ini中相关配置参数:

upload_max_filesize = 20M
post_max_size = 25M
max_file_uploads = 20

这些参数控制上传文件的最大尺寸和数量,需要根据实际需求调整。

标签: 上传php
分享给朋友:

相关文章

vue上传视频实现

vue上传视频实现

Vue 实现视频上传功能 安装依赖 确保项目中已安装 axios 或 vue-upload-component 等上传库。通过 npm 安装: npm install axios 前端组件实现 创建…

php实现分页

php实现分页

PHP实现分页的基本方法 使用原生PHP实现分页功能需要结合数据库查询和HTML展示。以下是核心实现步骤: 数据库查询与分页逻辑 // 连接数据库 $conn = new mysqli('loca…

php 实现登录

php 实现登录

PHP 登录功能实现 使用 PHP 实现登录功能通常需要结合数据库验证和会话管理。以下是一个基本的登录实现流程: 数据库准备 创建用户表存储用户名和密码(建议使用哈希加密): CREATE TAB…

php 实现排序

php 实现排序

PHP 实现数组排序的方法 PHP 提供了多种内置函数和方法来实现数组排序,适用于不同的排序需求。以下是一些常见的排序实现方式: 使用 sort() 函数对数组进行升序排序 sort() 函数对数组…

php 实现单链表

php 实现单链表

单链表的基本概念 单链表是一种线性数据结构,由节点组成,每个节点包含数据域和指向下一个节点的指针域。链表的头节点是访问整个链表的入口。 单链表的节点类实现 在PHP中,可以通过类来定义链表节点。每个…

php实现登陆

php实现登陆

PHP 实现登录功能 创建登录表单 在 HTML 文件中创建一个登录表单,包含用户名和密码输入框,表单的 action 属性指向处理登录的 PHP 文件。 <form action="logi…