php - 如何给上传的图像文件一个唯一的文件名
问题描述
我正在运行一个本地主机项目。我正在将图像和一些文本上传到 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");
?>
解决方案
您可以使用 PHP 的随机函数为上传的文件创建随机字符串。
所以,请修改这一行:
$target = "images/".basename($image);
至
$target = "images/". substr(md5(mt_rand(0, 9999)), 0, 21) . '-' . basename($image);
解释:
您正在使用 PHP 函数向上传的文件添加随机字符串。
使用随机字符串重命名/保存上传的文件解决了一个严重的问题:如果上传了相同的图像名称的文件,则图像会被覆盖。
上传的文件现在前面有 21 个随机字符。因此,几乎不可能有同名的文件。
推荐阅读
- javascript - 如何在 chrome 扩展中创建的 iframe 中运行 javascript
- javascript - 在数组中查找对象的数量会改变数组本身
- java - 在 Java 中处理挂起的线程
- android - Android - 为仅现场/现场应用程序添加代理
- c# - 如何将 DataTable 的所有 DataColumns 获取到列表
- c# - fluentftp上传目录跳过子文件夹
- r - R 语法问题——第 2 部分 redux
- python - Pyinstaller RecursionError: maximum recursion depth exceeded
- excel - In VBA I'm trying to subtract 2 cells, then comparing them, then adding the initial value to the left of cell in which formula is used
- bash - 如何围绕 mercurial 的“推送创建新的远程头”编写一个钩子?