2017-02-16 64 views
1

所以我有一个项目的问题,我正在上瘾,并试图尽可能(我能想到)。php图像文件上传编号问题

now,在“editBanner.php”页面有一个错误。删除图像时,该号码将被删除。上传新文件时,会给出比当前横幅总数多一个的编号。这是一个主要的问题,例如如果我们有四个横幅:1.jpg,2.jpg,3.jpg和4.jpg。如果删除2.jpg,我们会留下1.jpg,3.jpg和4.jpg。如果我们上传了一张新图片,页面会计算图片的数量(在这种情况下为三张)并添加1,给我们一个新的文件名“4.jpg”。我们已经有一个名为4.jpg的文件,因此旧的4.jpg将被替换。

我被告知我必须使用microtime函数来解决这个问题,但由于我没有接触到这个函数,我真的不知道如何使用它。如果你可以看看我的代码并给我一个例子,那将会很棒。

<?php 
    require_once ("Includes/simplecms-config.php"); 
    require_once ("Includes/connectDB.php"); 
    include("Includes/header.php");   

    confirm_is_admin(); 

    $dir = 'Images/banner'; 
    $confirmation = ""; 

    if(isset($_GET["del"])){ 
     if (file_exists($dir . "/" . $_GET["del"])) { 
      unlink($dir . "/" . $_GET["del"]); 
      $confirmation = $_GET["del"] . " deleted. <br><br>"; 
     } else { 
      $confirmation = $_GET["del"] . " doesn't exist. <br> 
    <br>"; 
     } 
    } 

    $files = scandir($dir); 
    array_shift($files); 
    array_shift($files); 

    $newImage = COUNT($files)+1; 

    if(isset($_GET["add"])) { 
     $confirmation = "Image successfully uploaded."; 
    } 

    if(isset($_FILES["file"]["name"])){ 
     $allowedExts = array("gif", "jpeg", "jpg", "png"); 
     sort($allowedExts); 
     $temp = explode(".", $_FILES["file"]["name"]); 
     $extension = end($temp); 

     if ((($_FILES["file"]["type"] == "image/gif") 
     || ($_FILES["file"]["type"] == "image/jpeg") 
     || ($_FILES["file"]["type"] == "image/jpg") 
     || ($_FILES["file"]["type"] == "image/pjpeg") 
     || ($_FILES["file"]["type"] == "image/x-png") 
     || ($_FILES["file"]["type"] == "image/png")) 
     && ($_FILES["file"]["size"] < 50 * 1024 * 1024) //50mb (1024 
     * 1kb = 1mb, 50 x 1024kb = 50mb) 
     && in_array($extension, $allowedExts)) { 
      if ($_FILES["file"]["error"] > 0) { 
      echo "Return Code: " . $_FILES["file"]["error"] . "<br>"; 
      } else { 
      echo "Upload: " . $_FILES["file"]["name"] . "<br>"; 
      echo "Type: " . $_FILES["file"]["type"] . "<br>"; 
      echo "Size: " . ($_FILES["file"]["size"]/1024) . " 
     kB<br>"; 
      echo "Temp file: " . $_FILES["file"]["tmp_name"] . " 
    <br>"; 
      echo round(microtime(true)) . $_FILES["file"] 
     ["tmp_name"]; 

      move_uploaded_file($_FILES["file"]["tmp_name"], $dir . 
     "/" . $newImage . "." . $extension); 
      echo "Stored in: " . $dir . "/" . $_FILES["file"] 
     ["name"]; 
      header("Location: editBanner.php?add=1"); 


      if(file_exists($_FILES["file"]["tmp_name"]["name"] 
     ["type"]["size"]) && is_file($_FILES["file"]["tmp_name"] 
     ["name"]["type"]["size"])) { 

      unlink($_FILES["file"]["tmp_name"]["name"]["type"] 
     ["size"]); 

      } 




      } 
     } else { 
      echo "Invalid file"; 
      } 
     } 
    ?> 


    <div id="container"> 
    <div id="admin"> 
     <?php 
      if(!empty($confirmation)) { 
       echo "<div id='confirmation'>" . $confirmation . " 
     </div>"; 
      } 

      for ($i = 0; $i < COUNT($files); $i++) { 

       echo '<div id="bannerImage">'; 
       echo $files[$i] . ' - <a href="editBanner.php?del=' . 
    $files[$i] . '">Delete</a><br>'; 
       echo '<img src="' . $dir . '/' . $files[$i] . '" 
     width="200px" height="100px" /><br>'; 
       echo '</div>'; 
      } 
     ?> 
     <div id="bannerAdd"> 
      <form action="editBanner.php" method="post" 
      enctype="multipart/form-data"> 
       <h3>Upload a New Banner Image</h3> 
       <input type="file" name="file" id="file"><br> 
       <input type="submit" name="submit" value="Submit"> 
       </form> 
      </div> 
     </div> 
    </div> 

    </div> <!-- End of outer-wrapper which opens in header.php --> 

    <?php 
     include ("Includes/footer.php"); 
    ?> 
+0

您可以使用主键的下一个值 –

回答

0

为了保存图像,您可以使用以下选项。

当前时间 -您可以使用time()在php中以当前时间以unix格式保存图像。如果需要,可以将它与名称连接起来。例如:

$newImageName = 'banner_'.time(); // output: banner_1487223503

对于删除的图像,我看你要扫描的目录和$files获取图像。所以,你可以应用相同的。

这样,所有图像的名称将是唯一的。希望这可以帮助!