当前位置:首页 > PHP

php实现文件上传下载

2026-02-27 17:21:01PHP

PHP 文件上传实现

文件上传需要使用 $_FILES 超全局变量处理上传的文件数据。确保 HTML 表单设置 enctype="multipart/form-data" 属性。

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

PHP 处理上传文件代码示例:

php实现文件上传下载

$targetDir = "uploads/";
$targetFile = $targetDir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;

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

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

// 允许特定文件类型
$allowedTypes = ["jpg", "png", "pdf"];
$fileType = strtolower(pathinfo($targetFile, PATHINFO_EXTENSION));
if (!in_array($fileType, $allowedTypes)) {
    echo "只允许 JPG, PNG, PDF 文件";
    $uploadOk = 0;
}

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

PHP 文件下载实现

文件下载可以通过设置适当的 HTTP 头实现强制下载而非在浏览器中打开。

php实现文件上传下载

$file = 'path/to/file.pdf';
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;
} else {
    echo "文件不存在";
}

安全注意事项

验证文件类型不应仅依赖文件扩展名,应使用 finfo_file() 函数检测实际 MIME 类型:

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

限制上传目录的执行权限,防止上传的恶意脚本被执行。建议将上传目录放在 web 根目录之外,或通过 .htaccess 禁止脚本执行:

<FilesMatch "\.(php|pl|py|jsp|asp|sh|cgi)$">
    Deny from all
</FilesMatch>

分享给朋友:

相关文章

php实现文件下载代码

php实现文件下载代码

实现文件下载的基本方法 使用PHP实现文件下载的核心是通过设置HTTP头部信息,强制浏览器触发下载行为而非直接显示文件内容。 $file_path = 'path/to/your/file.ext…

vue实现文件导入

vue实现文件导入

文件导入的基本实现 在Vue中实现文件导入通常通过HTML的<input type="file">元素结合File API完成。创建一个文件选择组件,监听change事件获取用户选择的文件…

vue预览文件实现

vue预览文件实现

实现文件预览功能 在Vue中实现文件预览功能可以通过多种方式完成,具体取决于文件类型(图片、PDF、文档等)和需求。以下是几种常见实现方法: 图片文件预览 使用HTML5的FileReader A…

vue语音文件播放实现

vue语音文件播放实现

实现语音文件播放的方法 在Vue中实现语音文件播放可以通过HTML5的<audio>元素或JavaScript的Audio对象来完成。以下是几种常见的实现方式。 使用HTML5的aud…

vue axios实现文件下载

vue axios实现文件下载

使用 Axios 实现文件下载 在 Vue 项目中,可以通过 Axios 发送请求实现文件下载功能。以下是具体实现方法: 发送 GET 请求下载文件 axios({ method: 'get…

vue实现文件拖拽下载

vue实现文件拖拽下载

Vue 实现文件拖拽下载 在 Vue 中实现文件拖拽下载功能,可以通过监听拖拽事件、处理文件数据并触发下载逻辑完成。以下是具体实现方法: 拖拽区域设置 创建一个可拖拽的区域,通常是一个 <…