2017-02-16 5 views
1

Так что у меня проблема с проектом, в котором я воруй, и попробовал все возможное (я могу думать).php file file upload нумерационная проблема

сейчас, есть ошибка на странице "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. Таким образом, вы можете применить то же самое.

Таким образом, имена всех изображений будут уникальными. Надеюсь это поможет!