我遇到了一個關於我的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()函數來確保每個上傳的映像都有一個唯一的名稱。