我遇到了一个关于我的PHP应用程序的图片上传功能的问题。情况如下:
我有一个表单,用户可以在其中创建一个帖子并上传与帖子相关的图片。 当我上传第一个帖子并附带一张图片时,一切正常,图片会正确保存到服务器的文件夹名为Uploads下,并以一个名称保存(例如,post1_image.jpg)。 然而,当我尝试上传一个具有与第一张图片相同名称的不同图片的第二个帖子时(例如,post1_image.jpg),问题就出现了。它不会将其保存为新的图片,而是替换掉与第一个帖子相关联的先前图片。 我该如何修改我的PHP代码以确保每个上传的图片都具有唯一的名称,并且不会覆盖任何现有的图片?这是我当前用于处理图片上传的PHP代码的简化版本:
<?php include "config.php"; // 与服务器建立连接 // 文件上传 if (isset($_FILES['fileToUpload'])) { $Errors = array(); $File_Name = $_FILES['fileToUpload']['name']; $File_Size= $_FILES['fileToUpload']['size']; $File_Tmp = $_FILES['fileToUpload']['tmp_name']; $File_Type = $_FILES['fileToUpload']['type']; $File_ext = end(explode('.',$File_Name)); $Extensions = array('jpeg','jpg','png'); if (in_array($File_ext,$Extensions) === false) { $Errors[] = "不允许上传此文件。您只能上传jpeg,jpg和png文件"; } if ($File_Size > 2097152) { $Errors[] = "您不能上传大于2MB的文件"; } if (empty($Errors) == true) { move_uploaded_file($File_Tmp,"upload/". $File_Name); }else{ print_r($Errors); die(); } } session_start(); $Title = mysqli_real_escape_string($conn,$_POST["post_title"]); $Description = mysqli_real_escape_string($conn,$_POST["postdesc"]); $Category = mysqli_real_escape_string($conn,$_POST["category"]); $date = date("D M,Y"); $Auther = $_SESSION['name']; $sql = "insert into post (title,description,category,post_date,author,post_img) values ('{$Title}', '{$Description}', {$Category}, '{$date}', '{$Auther}','{$File_Name}');"; $sql .= "Update category set post = post+1 where category_id = $Category;"; // $result = mysqli_multi_query($conn, $sql) or die ("Query unsucceful"); if (mysqli_multi_query($conn, $sql)) { mysqli_close($conn); header('Location: http://'.$hostname.'/cms/admin/post.php'); }else { echo "查询失败"; } ?>
非常感谢您对如何解决这个问题的任何见解或建议!谢谢!
您可以使用uniqid()函数来确保每个上传的图像都有一个唯一的名称。