当前位置:首页 > 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 "上传失败";
    }
}

安全增强措施

增加文件类型验证:

$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处理脚本修改:

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 实现文件上传

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

相关文章

php实现分页

php实现分页

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

php实现文件上传

php实现文件上传

PHP 文件上传实现方法 在 PHP 中实现文件上传需要处理 HTML 表单和服务器端脚本。以下是详细步骤: 创建 HTML 表单 使用 enctype="multipart/form-data"…

php实现验证码

php实现验证码

PHP实现验证码的方法 使用GD库生成验证码 GD库是PHP中处理图像的扩展,可用于生成验证码图片。 <?php session_start(); $width = 120; $height…

php实现socket

php实现socket

PHP 实现 Socket 通信 PHP 可以通过 socket 扩展实现网络通信,支持 TCP/UDP 协议。以下是实现 Socket 通信的核心步骤和代码示例。 创建 TCP 服务器 //…

php实现

php实现

PHP 实现的基本方法 PHP 是一种服务器端脚本语言,广泛用于 Web 开发。以下是 PHP 实现的一些常见方法。 变量与数据类型 PHP 变量以 $ 开头,支持多种数据类型: $n…

php如何实现直播

php如何实现直播

实现直播功能的方法 PHP可以通过结合其他技术和工具来实现直播功能。以下是几种常见的方法: 使用流媒体服务器 配置流媒体服务器如Nginx-RTMP、Red5或Wowza。这些服务器支持RTM…