当前位置:首页 > PHP

php附件功能实现

2026-02-16 19:16:53PHP

PHP 实现文件上传功能

创建 HTML 表单用于文件上传

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

处理文件上传的 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;
}

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

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

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

安全增强措施

验证文件类型和内容

$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if($check !== false) {
    echo "文件是有效的图片 - " . $check["mime"] . ".";
    $uploadOk = 1;
} else {
    echo "文件不是图片";
    $uploadOk = 0;
}

生成唯一文件名防止覆盖

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

多文件上传实现

HTML 多文件上传表单

<form action="upload.php" method="post" enctype="multipart/form-data">
    <input type="file" name="filesToUpload[]" id="filesToUpload" multiple>
    <input type="submit" value="上传文件" name="submit">
</form>

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");
    }
}

文件下载功能实现

创建下载链接

$files = glob('uploads/*');
foreach ($files as $file) {
    echo '<a href="download.php?file='.urlencode(basename($file)).'">下载 '.basename($file).'</a><br>';
}

下载处理脚本

php附件功能实现

$file = 'uploads/'.$_GET['file'];
if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename="'.basename($file).'"');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    readfile($file);
    exit;
}

标签: 附件功能
分享给朋友:

相关文章

vue前端实现打印功能

vue前端实现打印功能

使用Vue实现前端打印功能 使用window.print()方法 Vue中可以直接调用浏览器的window.print()方法实现打印功能。这种方法简单快捷,适用于打印整个页面或特定区域。 meth…

前端实现拖拽功能vue

前端实现拖拽功能vue

使用 HTML5 拖放 API 在 Vue 中可以通过 HTML5 的原生拖放 API 实现拖拽功能。需要监听 dragstart、dragover 和 drop 事件。 <template&…

vue实现拨号功能

vue实现拨号功能

Vue 实现拨号功能 使用 tel: 协议实现基础拨号 在 Vue 中可以通过 HTML 的 <a> 标签结合 tel: 协议实现拨号功能。这种方式适用于移动端浏览器,点击后会直接调用系统…

vue怎么实现功能

vue怎么实现功能

Vue 是一个渐进式 JavaScript 框架,常用于构建用户界面。以下是一些常见的功能实现方法: 数据绑定 Vue 通过 v-model 实现双向数据绑定,适用于表单输入等场景: <te…

vue实现换页功能

vue实现换页功能

Vue 实现分页功能 使用第三方库(如 Element UI) 安装 Element UI: npm install element-ui 在 main.js 中引入: import Vue fr…

vue 分页功能实现

vue 分页功能实现

分页功能实现方法 使用 Element UI 的分页组件 Element UI 提供了现成的分页组件 el-pagination,可以快速实现分页功能。 安装 Element UI: npm in…