当前位置:首页 > PHP

php实现文件上传下载

2026-01-28 20:22:06PHP

文件上传实现

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

HTML表单示例:

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

PHP处理脚本(upload.php):

$targetDir = "uploads/";
$targetFile = $targetDir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$fileType = 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($fileType, $allowedTypes)) {
    echo "只允许JPG, JPEG, PNG和GIF文件";
    $uploadOk = 0;
}

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

文件下载实现

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

PHP下载脚本示例(download.php):

$file = 'uploads/' . basename($_GET['file']);
$filepath = realpath($file);

if (file_exists($filepath)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename="'.basename($filepath).'"');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($filepath));
    flush();
    readfile($filepath);
    exit;
} else {
    http_response_code(404);
    echo "文件不存在";
}

安全注意事项

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

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

限制上传目录的访问权限,确保目录不可执行:

chmod($targetDir, 0755);

考虑重命名上传文件以避免文件名冲突和安全问题:

$newFilename = uniqid() . '.' . $fileType;
$targetFile = $targetDir . $newFilename;

大文件上传处理

对于大文件上传,可能需要调整PHP配置:

ini_set('upload_max_filesize', '100M');
ini_set('post_max_size', '100M');
ini_set('max_execution_time', '300');

或者通过分片上传技术实现,使用JavaScript将文件分块后分别上传。

php实现文件上传下载

分享给朋友:

相关文章

php实现文件下载

php实现文件下载

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

css文件怎么制作

css文件怎么制作

创建CSS文件的基本步骤 CSS文件用于定义网页的样式,可以与HTML文件分离,便于管理和维护。以下是创建CSS文件的方法: 新建文本文件 使用任意文本编辑器(如Notepad++、VS Code…

旋转相册制作css文件

旋转相册制作css文件

旋转相册制作CSS文件 旋转相册通常通过CSS动画和3D变换实现,以下是一个完整的CSS文件示例,用于创建一个3D旋转相册效果。 基础HTML结构 在CSS文件之前,需确保HTML结构包含相册容器…

js实现文件下载

js实现文件下载

使用 a 标签下载文件 通过动态创建 a 标签并设置 download 属性实现文件下载。适用于已知文件 URL 或 Blob 数据的情况。 function downloadFile(url,…

php实现文件下载

php实现文件下载

PHP实现文件下载的方法 通过PHP实现文件下载功能,可以采用多种方式,以下是几种常见的实现方法: 使用header()函数强制下载 设置HTTP头信息,强制浏览器下载文件而非直接打开:…

php 实现文件下载

php 实现文件下载

实现文件下载的基本方法 使用 PHP 实现文件下载的核心是通过设置 HTTP 头部信息,强制浏览器将文件作为附件下载而非直接显示。以下是一个基础实现示例: $file_path = '/path/…