当前位置:首页 > PHP

php实现登录上传图片

2026-02-28 04:30:43PHP

PHP 登录与图片上传实现

用户登录验证

创建一个登录表单(login.php),包含用户名和密码输入字段。表单提交后,使用 PHP 验证用户凭据。

// login.php
<form action="authenticate.php" method="post">
    <input type="text" name="username" placeholder="Username">
    <input type="password" name="password" placeholder="Password">
    <button type="submit">Login</button>
</form>

在 authenticate.php 中处理登录逻辑:

// authenticate.php
session_start();
$username = $_POST['username'];
$password = $_POST['password'];

// 验证逻辑(示例中使用硬编码,实际应查询数据库)
if ($username === 'admin' && $password === 'password') {
    $_SESSION['logged_in'] = true;
    $_SESSION['username'] = $username;
    header('Location: upload.php');
} else {
    echo "Invalid credentials";
}

图片上传功能

创建上传表单(upload.php),确保用户已登录:

// upload.php
session_start();
if (!isset($_SESSION['logged_in']) || !$_SESSION['logged_in']) {
    header('Location: login.php');
    exit;
}
?>
<form action="process_upload.php" method="post" enctype="multipart/form-data">
    <input type="file" name="image" accept="image/*">
    <button type="submit">Upload</button>
</form>

处理上传的图片(process_upload.php):

// process_upload.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) {
        echo "File is not an image.";
        $uploadOk = 0;
    }
}

// 检查文件大小(限制为5MB)
if ($_FILES["image"]["size"] > 5000000) {
    echo "File is too large.";
    $uploadOk = 0;
}

// 允许特定文件格式
if ($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg") {
    echo "Only JPG, JPEG, PNG files are allowed.";
    $uploadOk = 0;
}

// 检查上传状态
if ($uploadOk == 0) {
    echo "File was not uploaded.";
} else {
    if (move_uploaded_file($_FILES["image"]["tmp_name"], $target_file)) {
        echo "The file " . htmlspecialchars(basename($_FILES["image"]["name"])) . " has been uploaded.";
    } else {
        echo "Error uploading file.";
    }
}

安全增强措施

创建上传目录并设置适当权限:

mkdir uploads
chmod 755 uploads

在服务器配置中限制上传文件大小(php.ini):

upload_max_filesize = 5M
post_max_size = 6M

考虑使用数据库存储上传记录:

// 连接数据库并存储记录
$pdo = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');
$stmt = $pdo->prepare("INSERT INTO uploads (username, filename, upload_date) VALUES (?, ?, NOW())");
$stmt->execute([$_SESSION['username'], basename($_FILES["image"]["name"])]);

错误处理与用户反馈

实现更友好的错误提示:

// 在 process_upload.php 中添加
if (!is_dir($target_dir)) {
    die("Upload directory does not exist");
}

if (!is_writable($target_dir)) {
    die("Upload directory is not writable");
}

添加文件重命名功能避免冲突:

$new_filename = uniqid() . '.' . $imageFileType;
$target_file = $target_dir . $new_filename;

php实现登录上传图片

标签: 上传图片php
分享给朋友:

相关文章

php实现打印功能

php实现打印功能

PHP 实现打印功能的方法 PHP 可以通过多种方式实现打印功能,具体取决于打印的目标(如打印机、PDF、网页等)和需求(如直接打印、生成打印预览等)。以下是几种常见的实现方式: 使用 JavaS…

php实现栈

php实现栈

栈的基本概念 栈(Stack)是一种遵循后进先出(LIFO)原则的数据结构。核心操作包括: push:元素入栈。 pop:元素出栈(返回并移除栈顶元素)。 peek:查看栈顶元素(不移…

php 实现登录

php 实现登录

PHP 登录功能实现 使用 PHP 实现登录功能通常需要结合数据库验证和会话管理。以下是一个基本的登录实现流程: 数据库准备 创建用户表存储用户名和密码(建议使用哈希加密): CREATE TAB…

php 实现接口

php 实现接口

PHP 实现接口的方法 在 PHP 中,接口(Interface)用于定义一组方法的规范,而不包含具体的实现。类可以实现(implement)接口,并必须实现接口中定义的所有方法。 定义接口 接口…

php数组实现

php数组实现

PHP 数组的基本实现 PHP 数组是一种非常灵活的数据结构,可以存储多个值,并且支持多种类型的键(整数或字符串)。PHP 数组实际上是有序映射(ordered map),可以看作是列表(vector…

php实现推送消息推送消息

php实现推送消息推送消息

PHP 实现消息推送的方法 使用 WebSocket 实现实时推送 WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,适合实现实时消息推送。 安装 Ratchet 库(WebSo…