php实现登录上传图片
PHP 实现登录上传图片
用户登录功能实现
创建一个登录表单 login.php,包含用户名和密码输入字段。表单提交到 login_check.php 进行验证。
<!-- login.php -->
<form action="login_check.php" method="post">
<input type="text" name="username" placeholder="用户名">
<input type="password" name="password" placeholder="密码">
<button type="submit">登录</button>
</form>
在 login_check.php 中验证用户凭据(示例使用硬编码验证,实际应查询数据库):
// login_check.php
session_start();
$valid_username = 'admin';
$valid_password = 'password123';
if ($_POST['username'] === $valid_username && $_POST['password'] === $valid_password) {
$_SESSION['logged_in'] = true;
$_SESSION['username'] = $_POST['username'];
header('Location: upload.php');
} else {
echo '登录失败';
}
图片上传功能实现
创建 upload.php 文件,检查用户是否已登录,并显示图片上传表单:
// upload.php
session_start();
if (!isset($_SESSION['logged_in']) || !$_SESSION['logged_in']) {
header('Location: login.php');
exit;
}
?>
<form action="upload_handler.php" method="post" enctype="multipart/form-data">
<input type="file" name="image" accept="image/*">
<button type="submit">上传图片</button>
</form>
处理上传的 upload_handler.php 文件:
// upload_handler.php
session_start();
if (!isset($_SESSION['logged_in']) || !$_SESSION['logged_in']) {
header('Location: login.php');
exit;
}
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["image"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file, PATHINFO_EXTENSION));
// 检查是否为真实图片
if (isset($_POST["submit"])) {
$check = getimagesize($_FILES["image"]["tmp_name"]);
if ($check !== false) {
$uploadOk = 1;
} else {
echo "文件不是图片。";
$uploadOk = 0;
}
}
// 检查文件大小(限制为2MB)
if ($_FILES["image"]["size"] > 2000000) {
echo "文件太大。";
$uploadOk = 0;
}
// 允许特定文件格式
if ($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg") {
echo "只允许 JPG, JPEG, PNG 文件。";
$uploadOk = 0;
}
// 检查上传状态并移动文件
if ($uploadOk == 0) {
echo "文件未上传。";
} else {
if (move_uploaded_file($_FILES["image"]["tmp_name"], $target_file)) {
echo "文件 " . htmlspecialchars(basename($_FILES["image"]["name"])) . " 上传成功。";
} else {
echo "上传文件时出错。";
}
}
安全注意事项
确保 uploads/ 目录存在且有写入权限:
mkdir uploads
chmod 755 uploads
限制上传文件类型和大小,防止恶意文件上传。在生产环境中,应使用更严格的安全措施,如:
- 数据库存储用户凭据并进行安全哈希处理
- 文件重命名防止目录遍历攻击
- 添加 CSRF 保护
- 对上传文件进行病毒扫描







