首页 > 解决方案 > 如何给上传的图像文件一个唯一的文件名

问题描述

我正在运行一个本地主机项目。我正在将图像和一些文本上传到 localhost phpmysql 服务器。图像文件保存到images文件夹中。当我上传一个名为1.png它的图像时,它以相同的名称保存在文件夹中。像这样—— images/1.png

我想要什么 -是否可以将图像文件名自动更改为唯一的?像这样 -images/1.png进入images/sgaggjhdzfndzfnd1.png

<?php 
    session_start(); 

    if (!isset($_SESSION['username'])) {
        $_SESSION['msg'] = "You must log in first";
        header('location: login.php');
    }

    if (isset($_GET['logout'])) {
        session_destroy();
        unset($_SESSION['username']);
        header("location: login.php");
    }


  // Create database connection
  include_once('db.php');

  // Initialize message variable
  $msg = "";

  // If upload button is clicked ...
  if (isset($_POST['upload'])) {
    // Get image name
    $image = $_FILES['image']['name'];
    // Get text
    $image_text = mysqli_real_escape_string($db, $_POST['image_text']);
    
    $text01 = mysqli_real_escape_string($db, $_POST['text01']);
    
    $text02 = mysqli_real_escape_string($db, $_POST['text02']);

    // image file directory
    $target = "images/".basename($image);

    $sql = "INSERT INTO images (image, image_text, text01, text02) VALUES ('$image', '$image_text', '$text01', '$text02')";
    // execute query
    mysqli_query($db, $sql);

    if (move_uploaded_file($_FILES['image']['tmp_name'], $target)) {
        $msg = "Image uploaded successfully";
    }else{
        $msg = "Failed to upload image";
    }
  }
  $result = mysqli_query($db, "SELECT * FROM images ORDER BY id DESC");
?>

标签: phpmysqlsql

解决方案


您可以使用 PHP 的随机函数为上传的文件创建随机字符串。

mt_rand()

md5()

substr()

所以,请修改这一行:

$target = "images/".basename($image);

$target = "images/". substr(md5(mt_rand(0, 9999)), 0, 21) . '-' . basename($image);

解释:

  1. 您正在使用 PHP 函数向上传的文件添加随机字符串。

  2. 使用随机字符串重命名/保存上传的文件解决了一个严重的问题:如果上传了相同的图像名称的文件,则图像会被覆盖。

  3. 上传的文件现在前面有 21 个随机字符。因此,几乎不可能有同名的文件。


推荐阅读