Appearance
上传文件模板
基本文件上传
表单示例
html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>文件上传</title>
<style>
body {
font-family: Arial, sans-serif;
background-color: #f4f4f4;
margin: 0;
padding: 20px;
}
.upload-container {
background-color: white;
padding: 20px;
border-radius: 5px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
max-width: 500px;
margin: 0 auto;
}
h2 {
text-align: center;
margin-bottom: 20px;
}
.form-group {
margin-bottom: 15px;
}
label {
display: block;
margin-bottom: 5px;
font-weight: bold;
}
input[type="file"] {
width: 100%;
padding: 8px;
border: 1px solid #ddd;
border-radius: 3px;
box-sizing: border-box;
}
input[type="submit"] {
width: 100%;
padding: 10px;
background-color: #4CAF50;
color: white;
border: none;
border-radius: 3px;
cursor: pointer;
}
input[type="submit"]:hover {
background-color: #45a049;
}
.error {
color: red;
margin-bottom: 15px;
}
.success {
color: green;
margin-bottom: 15px;
}
.file-list {
margin-top: 20px;
}
.file-item {
padding: 10px;
border-bottom: 1px solid #ddd;
}
.file-item a {
text-decoration: none;
color: #333;
}
.file-item a:hover {
color: #4CAF50;
}
</style>
</head>
<body>
<div class="upload-container">
<h2>文件上传</h2>
<?php if (isset($error)) { echo '<div class="error">' . $error . '</div>'; } ?>
<?php if (isset($success)) { echo '<div class="success">' . $success . '</div>'; } ?>
<form method="post" action="upload.php" enctype="multipart/form-data">
<div class="form-group">
<label for="file">选择文件:</label>
<input type="file" id="file" name="file" required>
</div>
<input type="submit" value="上传">
</form>
<div class="file-list">
<h3>已上传文件</h3>
<?php
$upload_dir = 'uploads/';
if (is_dir($upload_dir)) {
$files = scandir($upload_dir);
foreach ($files as $file) {
if ($file != '.' && $file != '..') {
echo '<div class="file-item"><a href="' . $upload_dir . $file . '" target="_blank">' . $file . '</a></div>';
}
}
} else {
echo '没有上传文件';
}
?>
</div>
</div>
</body>
</html>上传处理
php
<?php
// 初始化变量
$error = '';
$success = '';
// 检查是否提交表单
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
// 检查是否有文件上传
if (isset($_FILES['file'])) {
$file = $_FILES['file'];
// 检查上传错误
if ($file['error'] === UPLOAD_ERR_OK) {
// 检查文件类型
$allowed_types = array('image/jpeg', 'image/png', 'image/gif', 'application/pdf', 'text/plain');
if (!in_array($file['type'], $allowed_types)) {
$error = '只允许上传 JPEG、PNG、GIF、PDF 和文本文件';
} else {
// 检查文件大小
$max_size = 5 * 1024 * 1024; // 5MB
if ($file['size'] > $max_size) {
$error = '文件大小不能超过 5MB';
} else {
// 生成唯一文件名
$filename = uniqid() . '.' . pathinfo($file['name'], PATHINFO_EXTENSION);
$upload_dir = 'uploads/';
// 创建上传目录
if (!is_dir($upload_dir)) {
mkdir($upload_dir, 0777, true);
}
// 移动上传文件
$file_path = $upload_dir . $filename;
if (move_uploaded_file($file['tmp_name'], $file_path)) {
$success = '文件上传成功:' . $filename;
} else {
$error = '文件上传失败';
}
}
}
} else {
// 处理上传错误
switch ($file['error']) {
case UPLOAD_ERR_INI_SIZE:
$error = '文件大小超过了 php.ini 中的限制';
break;
case UPLOAD_ERR_FORM_SIZE:
$error = '文件大小超过了表单中的限制';
break;
case UPLOAD_ERR_PARTIAL:
$error = '文件只上传了一部分';
break;
case UPLOAD_ERR_NO_FILE:
$error = '没有上传文件';
break;
case UPLOAD_ERR_NO_TMP_DIR:
$error = '临时文件夹不存在';
break;
case UPLOAD_ERR_CANT_WRITE:
$error = '无法写入临时文件';
break;
case UPLOAD_ERR_EXTENSION:
$error = '文件上传被扩展阻止';
break;
default:
$error = '未知错误';
break;
}
}
} else {
$error = '没有文件上传';
}
}
// 显示上传表单
include 'upload_form.php';
?>多文件上传
表单示例
html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>多文件上传</title>
<style>
body {
font-family: Arial, sans-serif;
background-color: #f4f4f4;
margin: 0;
padding: 20px;
}
.upload-container {
background-color: white;
padding: 20px;
border-radius: 5px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
max-width: 500px;
margin: 0 auto;
}
h2 {
text-align: center;
margin-bottom: 20px;
}
.form-group {
margin-bottom: 15px;
}
label {
display: block;
margin-bottom: 5px;
font-weight: bold;
}
input[type="file"] {
width: 100%;
padding: 8px;
border: 1px solid #ddd;
border-radius: 3px;
box-sizing: border-box;
margin-bottom: 10px;
}
input[type="submit"] {
width: 100%;
padding: 10px;
background-color: #4CAF50;
color: white;
border: none;
border-radius: 3px;
cursor: pointer;
}
input[type="submit"]:hover {
background-color: #45a049;
}
.error {
color: red;
margin-bottom: 15px;
}
.success {
color: green;
margin-bottom: 15px;
}
.file-list {
margin-top: 20px;
}
.file-item {
padding: 10px;
border-bottom: 1px solid #ddd;
}
.file-item a {
text-decoration: none;
color: #333;
}
.file-item a:hover {
color: #4CAF50;
}
</style>
</head>
<body>
<div class="upload-container">
<h2>多文件上传</h2>
<?php if (isset($error)) { echo '<div class="error">' . $error . '</div>'; } ?>
<?php if (isset($success)) { echo '<div class="success">' . $success . '</div>'; } ?>
<form method="post" action="multiple_upload.php" enctype="multipart/form-data">
<div class="form-group">
<label>选择文件:</label>
<input type="file" name="files[]" multiple>
</div>
<input type="submit" value="上传">
</form>
<div class="file-list">
<h3>已上传文件</h3>
<?php
$upload_dir = 'uploads/';
if (is_dir($upload_dir)) {
$files = scandir($upload_dir);
foreach ($files as $file) {
if ($file != '.' && $file != '..') {
echo '<div class="file-item"><a href="' . $upload_dir . $file . '" target="_blank">' . $file . '</a></div>';
}
}
} else {
echo '没有上传文件';
}
?>
</div>
</div>
</body>
</html>上传处理
php
<?php
// 初始化变量
$error = '';
$success = '';
// 检查是否提交表单
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
// 检查是否有文件上传
if (isset($_FILES['files'])) {
$files = $_FILES['files'];
$upload_count = 0;
// 遍历上传的文件
for ($i = 0; $i < count($files['name']); $i++) {
$file = array(
'name' => $files['name'][$i],
'type' => $files['type'][$i],
'tmp_name' => $files['tmp_name'][$i],
'error' => $files['error'][$i],
'size' => $files['size'][$i]
);
// 检查上传错误
if ($file['error'] === UPLOAD_ERR_OK) {
// 检查文件类型
$allowed_types = array('image/jpeg', 'image/png', 'image/gif', 'application/pdf', 'text/plain');
if (!in_array($file['type'], $allowed_types)) {
$error .= '文件 ' . $file['name'] . ' 类型不允许<br>';
} else {
// 检查文件大小
$max_size = 5 * 1024 * 1024; // 5MB
if ($file['size'] > $max_size) {
$error .= '文件 ' . $file['name'] . ' 大小超过限制<br>';
} else {
// 生成唯一文件名
$filename = uniqid() . '.' . pathinfo($file['name'], PATHINFO_EXTENSION);
$upload_dir = 'uploads/';
// 创建上传目录
if (!is_dir($upload_dir)) {
mkdir($upload_dir, 0777, true);
}
// 移动上传文件
$file_path = $upload_dir . $filename;
if (move_uploaded_file($file['tmp_name'], $file_path)) {
$upload_count++;
} else {
$error .= '文件 ' . $file['name'] . ' 上传失败<br>';
}
}
}
} else {
$error .= '文件 ' . $file['name'] . ' 上传错误: ' . $file['error'] . '<br>';
}
}
if ($upload_count > 0) {
$success = '成功上传 ' . $upload_count . ' 个文件';
}
} else {
$error = '没有文件上传';
}
}
// 显示上传表单
include 'multiple_upload_form.php';
?>图片上传与预览
表单示例
html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>图片上传与预览</title>
<style>
body {
font-family: Arial, sans-serif;
background-color: #f4f4f4;
margin: 0;
padding: 20px;
}
.upload-container {
background-color: white;
padding: 20px;
border-radius: 5px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
max-width: 500px;
margin: 0 auto;
}
h2 {
text-align: center;
margin-bottom: 20px;
}
.form-group {
margin-bottom: 15px;
}
label {
display: block;
margin-bottom: 5px;
font-weight: bold;
}
input[type="file"] {
width: 100%;
padding: 8px;
border: 1px solid #ddd;
border-radius: 3px;
box-sizing: border-box;
}
input[type="submit"] {
width: 100%;
padding: 10px;
background-color: #4CAF50;
color: white;
border: none;
border-radius: 3px;
cursor: pointer;
}
input[type="submit"]:hover {
background-color: #45a049;
}
.error {
color: red;
margin-bottom: 15px;
}
.success {
color: green;
margin-bottom: 15px;
}
.preview {
margin-top: 20px;
}
.preview img {
max-width: 100%;
max-height: 300px;
border: 1px solid #ddd;
border-radius: 3px;
}
.file-list {
margin-top: 20px;
}
.file-item {
padding: 10px;
border-bottom: 1px solid #ddd;
}
.file-item a {
text-decoration: none;
color: #333;
}
.file-item a:hover {
color: #4CAF50;
}
</style>
<script>
function previewImage(event) {
var reader = new FileReader();
reader.onload = function() {
var output = document.getElementById('preview');
output.src = reader.result;
output.style.display = 'block';
};
reader.readAsDataURL(event.target.files[0]);
}
</script>
</head>
<body>
<div class="upload-container">
<h2>图片上传与预览</h2>
<?php if (isset($error)) { echo '<div class="error">' . $error . '</div>'; } ?>
<?php if (isset($success)) { echo '<div class="success">' . $success . '</div>'; } ?>
<form method="post" action="image_upload.php" enctype="multipart/form-data">
<div class="form-group">
<label for="image">选择图片:</label>
<input type="file" id="image" name="image" accept="image/*" onchange="previewImage(event)" required>
</div>
<div class="preview">
<img id="preview" style="display: none;">
</div>
<input type="submit" value="上传">
</form>
<div class="file-list">
<h3>已上传图片</h3>
<?php
$upload_dir = 'uploads/';
if (is_dir($upload_dir)) {
$files = scandir($upload_dir);
foreach ($files as $file) {
if ($file != '.' && $file != '..') {
$file_path = $upload_dir . $file;
$file_ext = strtolower(pathinfo($file, PATHINFO_EXTENSION));
if (in_array($file_ext, array('jpg', 'jpeg', 'png', 'gif'))) {
echo '<div class="file-item"><a href="' . $file_path . '" target="_blank"><img src="' . $file_path . '" style="width: 100px; height: auto;"></a> ' . $file . '</div>';
}
}
}
} else {
echo '没有上传图片';
}
?>
</div>
</div>
</body>
</html>上传处理
php
<?php
// 初始化变量
$error = '';
$success = '';
// 检查是否提交表单
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
// 检查是否有文件上传
if (isset($_FILES['image'])) {
$file = $_FILES['image'];
// 检查上传错误
if ($file['error'] === UPLOAD_ERR_OK) {
// 检查文件类型
$allowed_types = array('image/jpeg', 'image/png', 'image/gif');
if (!in_array($file['type'], $allowed_types)) {
$error = '只允许上传 JPEG、PNG 和 GIF 图片';
} else {
// 检查文件大小
$max_size = 2 * 1024 * 1024; // 2MB
if ($file['size'] > $max_size) {
$error = '文件大小不能超过 2MB';
} else {
// 生成唯一文件名
$filename = uniqid() . '.' . pathinfo($file['name'], PATHINFO_EXTENSION);
$upload_dir = 'uploads/';
// 创建上传目录
if (!is_dir($upload_dir)) {
mkdir($upload_dir, 0777, true);
}
// 移动上传文件
$file_path = $upload_dir . $filename;
if (move_uploaded_file($file['tmp_name'], $file_path)) {
$success = '图片上传成功:' . $filename;
} else {
$error = '图片上传失败';
}
}
}
} else {
// 处理上传错误
switch ($file['error']) {
case UPLOAD_ERR_INI_SIZE:
$error = '文件大小超过了 php.ini 中的限制';
break;
case UPLOAD_ERR_FORM_SIZE:
$error = '文件大小超过了表单中的限制';
break;
case UPLOAD_ERR_PARTIAL:
$error = '文件只上传了一部分';
break;
case UPLOAD_ERR_NO_FILE:
$error = '没有上传文件';
break;
case UPLOAD_ERR_NO_TMP_DIR:
$error = '临时文件夹不存在';
break;
case UPLOAD_ERR_CANT_WRITE:
$error = '无法写入临时文件';
break;
case UPLOAD_ERR_EXTENSION:
$error = '文件上传被扩展阻止';
break;
default:
$error = '未知错误';
break;
}
}
} else {
$error = '没有文件上传';
}
}
// 显示上传表单
include 'image_upload_form.php';
?>总结
本文提供了 PHP 中文件上传的基本模板,包括基本文件上传、多文件上传和图片上传与预览等功能。这些模板可以作为开发中的参考,帮助你快速实现文件上传功能。
在使用这些模板时,应该注意以下几点:
- 对上传文件进行严格的验证
- 限制文件类型和大小
- 生成唯一文件名
- 创建安全的上传目录
- 正确处理上传错误
- 遵循最佳实践和编码规范
通过使用这些模板,你可以更高效地开发 PHP 应用程序,提高代码质量和安全性。
