当前位置:首页 > PHP

php 实现文件上传

2026-01-30 07:03:15PHP

文件上传基础实现

使用PHP实现文件上传需要结合HTML表单和PHP的文件处理功能。以下是一个基础实现方法:

创建HTML表单(upload_form.html):

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

PHP处理脚本(upload.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;
}

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

// 检查上传标志并移动文件
if ($uploadOk == 1) {
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $targetFile)) {
        echo "文件上传成功";
    } else {
        echo "上传失败";
    }
}

安全增强措施

增加文件类型验证:

php 实现文件上传

$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file($finfo, $_FILES["fileToUpload"]["tmp_name"]);
finfo_close($finfo);

$allowedMimes = ["image/jpeg", "image/png", "image/gif"];
if (!in_array($mime, $allowedMimes)) {
    die("无效的文件类型");
}

重命名上传文件防止覆盖:

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

多文件上传实现

HTML表单修改:

<input type="file" name="filesToUpload[]" id="filesToUpload" multiple>

PHP处理脚本修改:

php 实现文件上传

foreach ($_FILES["filesToUpload"]["tmp_name"] as $key => $tmpName) {
    $targetFile = $targetDir . basename($_FILES["filesToUpload"]["name"][$key]);
    move_uploaded_file($tmpName, $targetFile);
}

错误处理与调试

检查上传错误代码:

if ($_FILES["fileToUpload"]["error"] !== UPLOAD_ERR_OK) {
    switch ($_FILES["fileToUpload"]["error"]) {
        case UPLOAD_ERR_INI_SIZE:
            echo "文件超过服务器限制";
            break;
        case UPLOAD_ERR_FORM_SIZE:
            echo "文件超过表单限制";
            break;
        // 其他错误处理...
    }
}

服务器配置注意事项

确保php.ini中相关设置正确:

file_uploads = On
upload_max_filesize = 20M
post_max_size = 21M
max_file_uploads = 20

创建上传目录并设置权限:

if (!file_exists($targetDir)) {
    mkdir($targetDir, 0755, true);
}

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

相关文章

h5实现文件上传

h5实现文件上传

实现文件上传的基本方法 使用HTML5的<input type="file">元素是最简单的文件上传方式。通过设置multiple属性可以实现多文件选择。 <input type=…

php 实现秒杀

php 实现秒杀

PHP 实现秒杀的关键技术 秒杀系统需要解决高并发、超卖、性能瓶颈等问题。以下是实现秒杀的核心方案: 使用 Redis 预减库存 将商品库存提前加载到 Redis 中,通过原子操作保证库存准确性:…

php 无限分类的实现

php 无限分类的实现

无限分类的实现方法 无限分类通常用于构建树形结构数据,如商品分类、多级菜单等。以下是几种常见的实现方式: 邻接列表模型(Adjacency List) 邻接列表是最简单的实现方式,通过在每个节点中存…

php实现注册登陆

php实现注册登陆

PHP 注册功能实现 创建数据库表结构(MySQL示例): CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, usern…

php实现验证码的识别

php实现验证码的识别

验证码识别的基本方法 验证码识别通常分为手动实现和第三方工具两种方式。手动实现需要图像处理和机器学习知识,而第三方工具则更快捷。 使用Tesseract OCR识别验证码 Tesseract是一个开…

php 实现多继承

php 实现多继承

在PHP中,原生不支持多继承,但可以通过以下几种方法模拟实现类似多继承的功能: 使用 trait Trait是PHP 5.4引入的特性,允许在类中复用代码片段,可以视为一种轻量级的继承机制。一个类可…