以下是详细的“PHP实现文件上传与下载实例与总结”的攻略:
PHP实现文件上传
1. HTML表单
文件上传需要通过HTML表单来完成,表单中需要包含 enctype="multipart/form-data"
属性。
<form method="POST" action="./upload.php" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="上传">
</form>
2. PHP处理
在PHP脚本中,需要使用 $_FILES
变量来获取文件上传信息。
// 上传文件保存目录
$uploadDir = './uploads/';
// 获取上传的文件信息
$file = $_FILES['file'];
// 处理上传
if ($file['error'] === UPLOAD_ERR_OK) { // 上传成功
// 移动文件到指定目录下,并生成新的文件名
$newFileName = $uploadDir . uniqid() . '.' . pathinfo($file['name'], PATHINFO_EXTENSION);
move_uploaded_file($file['tmp_name'], $newFileName);
// 输出上传成功信息
echo '文件上传成功';
} else { // 上传失败
echo '上传失败:' . $file['error'];
}
3. 示例说明
下面是一个完整的上传示例,其中还包含了文件类型判断和文件大小限制。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>文件上传</title>
</head>
<body>
<h1>文件上传</h1>
<form method="POST" action="./upload.php" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="上传">
</form>
</body>
</html>
// 允许上传的文件类型
$allowTypes = ['jpg', 'jpeg', 'png', 'gif'];
// 允许上传的文件大小,单位:字节
$allowSize = 1024 * 1024 * 2; // 2 MB
// 上传文件保存目录
$uploadDir = './uploads/';
// 获取上传的文件信息
$file = $_FILES['file'];
// 判断文件类型和文件大小
$fileExt = pathinfo($file['name'], PATHINFO_EXTENSION);
$fileSize = $file['size'];
if (!in_array($fileExt, $allowTypes)) { // 文件类型不符
die('文件类型不允许');
} else if ($fileSize > $allowSize) { // 文件大小超出限制
die('文件大小超出限制');
}
// 处理上传
if ($file['error'] === UPLOAD_ERR_OK) { // 上传成功
// 移动文件到指定目录下,并生成新的文件名
$newFileName = $uploadDir . uniqid() . '.' . $fileExt;
move_uploaded_file($file['tmp_name'], $newFileName);
// 输出上传成功信息
echo '文件上传成功';
} else { // 上传失败
echo '上传失败:' . $file['error'];
}
PHP实现文件下载
1. PHP处理
文件下载需要使用 header
函数设置响应头信息,指定要下载的文件类型和文件名,并通过 readfile
函数将文件内容输出到客户端。
// 要下载的文件路径
$filePath = './downloads/file.pdf';
// 获取要下载的文件名
$fileName = basename($filePath);
// 设置响应头信息,指定要下载的文件类型和文件名
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . $fileName . '"');
// 输出文件内容到客户端
readfile($filePath);
2. 示例说明
以下是一个完整的文件下载示例,其中还包含了文件是否存在和文件权限的检查。
// 要下载的文件路径
$filePath = './downloads/file.pdf';
// 判断文件是否存在,并检查文件权限
if (!file_exists($filePath)) {
die('文件不存在');
} else if (!is_readable($filePath)) {
die('文件不可读');
}
// 获取要下载的文件名
$fileName = basename($filePath);
// 设置响应头信息,指定要下载的文件类型和文件名
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . $fileName . '"');
// 输出文件内容到客户端
readfile($filePath);
总结
-
文件上传需要使用HTML表单,并在PHP脚本中使用
$_FILES
变量获取文件上传信息,然后通过move_uploaded_file
函数将文件保存到目标文件夹。 -
文件下载需要使用
header
函数设置响应头信息,指定要下载的文件类型和文件名,并通过readfile
函数将文件内容输出到客户端。 -
在文件上传和下载的过程中,需要注意文件类型、文件大小和文件权限等问题,以及对与文件名保留的安全规范。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP实现文件上传与下载实例与总结 - Python技术站