当前位置:首页 > PHP

php实现文件上传

2026-02-13 11:44:34PHP

文件上传基础实现

使用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):

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

// 检查文件是否为真实图片(可选)
if(isset($_POST["submit"])) {
    $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
    if($check !== false) {
        $uploadOk = 1;
    } else {
        $uploadOk = 0;
    }
}

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

// 限制文件大小(例如500KB)
if ($_FILES["fileToUpload"]["size"] > 500000) {
    $uploadOk = 0;
}

// 允许特定文件格式
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
    $uploadOk = 0;
}

// 检查上传标志
if ($uploadOk == 0) {
    echo "文件未上传";
} else {
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $targetFile)) {
        echo "文件". basename( $_FILES["fileToUpload"]["name"]). "上传成功";
    } else {
        echo "上传过程中发生错误";
    }
}
?>

安全增强措施

确保上传目录不可执行:

// 在uploads目录中放置.htaccess文件
// 内容为:php_flag engine off

重命名上传文件:

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

验证文件内容:

// 检查文件头是否符合预期类型
$allowedTypes = [
    'jpg' => "\xFF\xD8\xFF",
    'png' => "\x89\x50\x4E\x47",
    'gif' => "GIF"
];

多文件上传实现

HTML表单:

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

PHP处理:

foreach ($_FILES["filesToUpload"]["error"] as $key => $error) {
    if ($error == UPLOAD_ERR_OK) {
        $tmp_name = $_FILES["filesToUpload"]["tmp_name"][$key];
        $name = basename($_FILES["filesToUpload"]["name"][$key]);
        move_uploaded_file($tmp_name, "uploads/$name");
    }
}

文件上传配置

php.ini相关设置:

file_uploads = On
upload_max_filesize = 2M
post_max_size = 8M
max_file_uploads = 20

运行时修改配置:

ini_set('upload_max_filesize', '10M');
ini_set('post_max_size', '12M');

错误处理

检查上传错误代码:

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

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

相关文章

php实现文件下载

php实现文件下载

PHP 实现文件下载的方法 使用 header() 函数强制下载 设置正确的 HTTP 头信息,强制浏览器下载文件而不是直接打开。 $file = 'path/to/file.pdf'; if (…

php实现购物车

php实现购物车

PHP实现购物车功能 购物车功能是电商网站的核心模块之一,通常涉及商品添加、删除、数量修改和结算等操作。以下是使用PHP实现购物车功能的几种方法。 使用Session存储购物车数据 Session…

php实现递归

php实现递归

递归的基本概念 递归是一种函数调用自身的技术,适用于解决可以分解为相同子问题的问题。在PHP中,递归需要明确的终止条件(基线条件),否则会导致无限循环。 递归实现阶乘 阶乘是经典的递归案例,n!…

php实现定时任务

php实现定时任务

PHP 实现定时任务的几种方法 在 PHP 中实现定时任务可以通过多种方式完成,具体选择取决于项目需求和服务器环境。以下是常见的实现方法: 使用 Cron 任务 Cron 是 Linux 系统中常…

php记住密码怎么实现

php记住密码怎么实现

使用Cookie实现记住密码功能 在PHP中,可以通过设置Cookie来记住用户的登录状态。以下是一个简单的实现方式: // 用户登录验证成功后 if ($login_success) {…

php长连接实现

php长连接实现

PHP 长连接实现方法 长连接(Keep-Alive)允许客户端与服务器在一次TCP连接中发送和接收多个HTTP请求/响应,减少重复建立连接的开销。以下是PHP中实现长连接的几种方式: 配置HTTP…