PHP 文件上传

PHP 中有一个变量 $_FILES 里面存了文件的信息,如文件名、大小、类型、存放路径等

PHP 文件上传的本质

将存放在临时目录下的临时文件移动到目的文件夹下

move_uploaded_file() 这是 PHP 的内置函数

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <form action="file_upload.php" method="post" enctype="multipart/form-data">
        <input type="file" name="file">
        <input type="submit" value="提交">
    </form>
</body>
</html>

file_upload.php

<meta charset="utf-8">
<?php
if ($_FILES["file"]["error"] > 0) {
    echo "Error: " . $_FILES["file"]["error"] . "<br />";
} else {
    echo "文件名: " . $_FILES["file"]["name"] . "<br />";
    echo "文件类型: " . $_FILES["file"]["type"] . "<br />";
    echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
    echo "临时存放位置: " . $_FILES["file"]["tmp_name"] . "<br />";

    $file_name = iconv('utf-8', 'gbk', $_FILES["file"]["name"]);
    if (file_exists("file_upload/" . $file_name)) {
        echo $_FILES["file"]["name"] . " 文件已存在";
    } else {
        move_uploaded_file(
            $_FILES["file"]["tmp_name"],
            "file_upload/" . $file_name
        );
        echo "已保存: " . "upload/" . $_FILES["file"]["name"];
    }
}
?>

案例

将文件路径写入数据库

file_upload.php

<meta charset="utf-8">
<?php
if ($_FILES["file"]["error"] > 0) {
    echo "Error: " . $_FILES["file"]["error"] . "<br />";
} else {
    echo "文件名: " . $_FILES["file"]["name"] . "<br />";
    echo "文件类型: " . $_FILES["file"]["type"] . "<br />";
    echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
    echo "临时存放位置: " . $_FILES["file"]["tmp_name"] . "<br />";

    $file_name = iconv('utf-8', 'gbk', $_FILES["file"]["name"]);
    if (file_exists("file_upload/" . $file_name)) {
        echo $_FILES["file"]["name"] . " 文件已存在";
    } else {
        move_uploaded_file(
            $_FILES["file"]["tmp_name"],
            "file_upload/" . $file_name
        );
        echo "已保存: " . "file_upload/" . $_FILES["file"]["name"];
        $file_path = "file_upload/" . $_FILES["file"]["name"];
        session_start();
        include('db.php');
        $username = $_SESSION['username'];
        $sql = "update user set logo='$file_path' where username='$username'";
        mysqli_query($conn,$sql);
    }
}
?>

main.php 中显示头像

<?php    
    $sql = "select * from user where username ='$username'";
    $result =mysqli_query($conn,$sql);
    $row = mysqli_fetch_assoc($result);
    // print_r($row);

 ?>

    <h1>欢迎用户<?php echo $username; ?></h1>
    <a href="?logout">退出登录</a>

    <form action="file_upload.php" method="post" enctype="multipart/form-data">
        <input type="file" name="file">
        <img src="<?php echo $row['logo']; ?>" alt="你的头像">
        <input type="submit" value="提交">
    </form>

优化一下代码功能

main.php

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        a {
            text-decoration: none;
            border: 2px solid black;
            border-radius: 10px;
            box-shadow: 5px 5px 5px black;
            padding: 5px 30px;
            margin: 20px auto;
        }

        img {
            width: 200px;
            border-radius: 100px;
            border: 2px solid black;
        }
    </style>
</head>

<body>
    <?php
    session_start();

    include('db.php');


    if (!isset($_SESSION['username'])) {
        echo "<script>alert('请登录')</script>";
        echo "<meta http-equiv='refresh' content='3;url=login.php'>";
        exit("<center><h1>Nice Hacker!</h1></center>");
    } else {
        $username = $_SESSION['username'];
    }

    if (isset($_REQUEST['logout'])) {
        echo "<script>alert('退出成功')</script>";
        echo "<meta http-equiv='refresh' content='0;url=login.php'>";
        session_destroy();
    }

    $sql = "select * from user where username ='$username'";
    $result = mysqli_query($conn, $sql);
    $row = mysqli_fetch_assoc($result);
    // print_r($row);

    ?>

    <h1>欢迎用户<?php echo $username; ?></h1>
    <a href="?logout">退出登录</a>

    <form action="file_upload.php" method="post" enctype="multipart/form-data">
        <input type="file" id="upload" name="file" hidden require>
        <label for="upload"><img src="<?php echo $row['logo']; ?>" alt="你的头像"></label>
        <input type="submit" value="提交">
    </form>

</body>

</html>

file_upload.php

<meta charset="utf-8">
<?php
if ($_FILES["file"]["error"] > 0) {
    echo "Error: " . $_FILES["file"]["error"] . "<br />";
} else {
    echo "文件名: " . $_FILES["file"]["name"] . "<br />";
    echo "文件类型: " . $_FILES["file"]["type"] . "<br />";
    echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
    echo "临时存放位置: " . $_FILES["file"]["tmp_name"] . "<br />";

    $ext = pathinfo($_FILES["file"]["name"])['extension'];
    $file_name = iconv('utf-8', 'gbk', date("YmdHis").".$ext");

    // $file_name = iconv('utf-8', 'gbk', $_FILES["file"]["name"]);
    if (file_exists("file_upload/" . $file_name)) {
        echo $file_name . " 文件已存在";
    } else {
        move_uploaded_file(
            $_FILES["file"]["tmp_name"],
            "file_upload/" . $file_name
        );
        echo "已保存: " . "file_upload/" . $file_name;
        $file_path = "file_upload/" . $file_name;
        session_start();
        include('db.php');
        $username = $_SESSION['username'];
        $sql = "update user set logo='$file_path' where username='$username'";
        mysqli_query($conn,$sql);
        header("Location: main.php");
        // 这句话也是跳转
    }
}
?>
学前沿IT,到英格科技! all right reserved,powered by Gitbook本文发布时间: 2025-04-15 20:07:17

results matching ""

    No results matching ""