当前位置:首页 > 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):

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):

php实现登录上传图片

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 中实现定时任务可以通过多种方式完成,具体选择取决于项目需求和服务器环境。以下是常见的实现方法: 使用 Cron 任务 Cron 是 Linux 系统中常用…

php实现注册

php实现注册

注册功能实现步骤 数据库准备 创建用户表,包含字段如id、username、password、email等。示例SQL: CREATE TABLE users ( id INT AUTO_I…

php实现静态

php实现静态

静态化实现方法 PHP实现静态化主要通过生成HTML文件或缓存机制来减少服务器动态解析的开销。以下是几种常见方法: 生成静态HTML文件 通过file_put_contents()将动态内容保存为H…

php 队列的实现

php 队列的实现

PHP 队列的实现方法 使用数据库实现队列 创建一个数据表存储队列任务,包含任务ID、状态、创建时间等字段。通过SQL语句实现任务的入队和出队操作。 // 入队操作 INSERT INTO queu…

php实现文章

php实现文章

PHP实现文章管理功能 在PHP中实现文章管理功能通常涉及数据库操作、表单处理和页面展示。以下是实现文章管理的基本步骤: 数据库设计 创建articles表,包含字段如id、title、conten…

php 实现聊天功能

php 实现聊天功能

PHP 实现聊天功能的方法 使用 WebSocket 和 Ratchet 库 WebSocket 是实现实时聊天的理想选择。Ratchet 是一个 PHP 库,用于处理 WebSocket 连接。…