悠悠楠杉
使用PHP和ZipArchive实现文件上传和下载功能
使用PHP和ZipArchive实现文件上传和下载功能
在现代的Web开发中,文件上传和下载是一个常见且重要的功能。PHP提供了强大的工具来处理这些任务,其中ZipArchive
类允许开发者在服务器端对ZIP文件进行创建、读取、解压等操作。本文将介绍如何使用PHP结合ZipArchive
类来实现一个简单的文件上传、压缩和下载的解决方案。
准备工作
在开始之前,请确保你的PHP环境已经启用了Zip
扩展。可以通过phpinfo()
函数或php -m
命令来检查该扩展是否已经启用。如果未启用,需要在你的php.ini
文件中启用它,并重启你的Web服务器。
1. 文件上传
首先,我们创建一个简单的HTML表单来上传文件:
```html
```
接下来是upload.php
的PHP代码,用于处理文件上传:
php
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$target_dir = "uploads/"; // 定义上传目录
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1; // 默认为1表示上传成功
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]); // 检查是否为图片文件
if ($check !== false) {
echo "文件是一张图片 - " . $check["mime"] . ".";
$uploadOk = 1; // 是图片则继续处理
} else {
echo "文件不是图片。";
$uploadOk = 0; // 不是图片则不继续处理
}
// 检查文件是否已经存在以及是否符合大小限制等...
if ($uploadOk == 0) {
echo "抱歉,您的文件未被上传。"; // 或其他错误信息...
} else {
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
echo "文件 ". htmlspecialchars( basename( $_FILES["fileToUpload"]["name"])). " 已成功上传。";
} else {
echo "抱歉,上传文件时发生错误。";
}
}
} else {
echo "访问无效。"; // 非POST请求返回错误信息...
}
?>
2. 文件压缩和下载
为了将多个文件压缩成一个ZIP包并提供下载,我们可以创建一个函数来处理这一过程:
php
function createZip($files = array(), $destination = '') { // 创建ZIP文件并返回其路径
$zip = new ZipArchive(); // 创建ZipArchive对象实例
if ($zip->open($destination, ZipArchive::CREATE) !== TRUE) { // 打开ZIP文件以创建或写入(如果它不存在)
exit("无法打开 <$destination>\n"); // 如果无法打开则退出并显示错误信息...
} // 添加文件到ZIP包中...(这里可以循环添加多个文件)$zip->addFile(此处是文件的路径, 在ZIP包中的名称); // 关闭ZIP文件$zip->close(); return $destination; // 返回ZIP文件的路径}function downloadZip($file) { // 提供ZIP文件的下载$file = realpath($file); if (file_exists($file)) { // 检查文件是否存在header('Content-Type: application/zip');header('Content-Disposition: attachment; filename="'.basename($file).'"');readfile($file); } else { // 如果文件不存在echo '文件不存在。';}}// 调用函数创建ZIP并下载$zipPath = createZip(['uploads/'.basename($_FILES["fileToUpload"]["name"]), 'other/anotherFile.txt']);downloadZip($zipPath);?>
以上代码片段展示了如何将一个或多个文件压缩成一个ZIP包并允许用户下载它。首先通过createZip
函数创建一个ZIP文件并添加所需的文件,然后通过downloadZip
函数提供下载功能。记得替换'other/anotherFile.txt'
为实际需要添加到ZIP包的其他文件路径,或者根据实际情况动态添加更多文件。