suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Benennen Sie Dateien beim Hochladen nacheinander um, basierend auf den vorhandenen Dateien im Verzeichnis

Ich verwende diesen (PHP-)Upload-Code, den ich online für das Bild-Upload-Formular gefunden habe.

Mir ist klar, dass es auf der Website bereits viele Fragen/Antworten zum Thema „Umbenennen von Dateien“ beim Hochladen gibt, und ich habe ziemlich viel darüber recherchiert.

Bisher ... scheint keiner von ihnen speziell darauf einzugehen, was ich tun möchte.

Hoffentlich kann dies durch Anpassen des von mir verwendeten Codes erreicht werden.

Letztendlich möchte ich eine einzelne Datei (nicht mehrere) hochladen und die Dateien automatisch mit einer einfachen Nummer benennen, z. B. 1, 2, 3, 4 oder 5 usw.

Kein Präfix und keine Erweiterung. Nur der numerische Wert des Namens.

Ich möchte jedoch, dass der Code zunächst das Zielverzeichnis überprüft, um zu scannen, welche Dateien „Name“ bereits vorhanden sind.

Wenn also die vorhandenen Dateien im Verzeichnis 1, 2, 3, 4 und 5... sind, werden die neuen Dateien automatisch der Reihe nach mit 6 usw. benannt.

Wenn jedoch die vorhandenen Dateien im Verzeichnis 1, 2, 4 und 5 sind (3 existiert nicht), wird die neue Datei als 3 hochgeladen, um die Reihenfolge beizubehalten.

Alternativ macht es mir für meine speziellen Bedürfnisse nicht einmal etwas aus, wenn alle Bilder im Verzeichnis bei einem neuen Upload umbenannt werden. Im Wesentlichen die Reihenfolge ändern, sodass die Reihenfolge der Zahlen erhalten bleibt.

Dies ist der Upload-Code, den ich derzeit verwende:

<?php

$target_dir = "userImages/userID/";

$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);

$uploadOk = 1;

$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));

// Check if image file is a actual image or fake image

if(isset($_POST["submit"])) {

  $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);

  if($check !== false) {

    echo "File is an image - " . $check["mime"] . ".";

    $uploadOk = 1;

  
  } else {

    echo "File is not an image.";

    $uploadOk = 0;

  
  }
}

// Check if file already exists

if (file_exists($target_file)) {

  echo "Sorry, file already exists.";

  $uploadOk = 0;
}

// Check file size

if ($_FILES["fileToUpload"]["size"] > 500000) {

  echo "Sorry, your file is too large.";

  $uploadOk = 0;


}

// Allow certain file formats

if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"

&& $imageFileType != "gif" ) {

  echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";

  $uploadOk = 0;


}


// Check if $uploadOk is set to 0 by an error

if ($uploadOk == 0) {

  echo "Sorry, your file was not uploaded.";

// if everything is ok, try to upload file


} else {

  if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {

    echo "The file ". htmlspecialchars( basename( $_FILES["fileToUpload"]["name"])). " has 
been uploaded.";

  } else {

    echo "Sorry, there was an error uploading your file.";

  
  }
}

?>

P粉310931198P粉310931198443 Tage vor682

Antworte allen(1)Ich werde antworten

  • P粉713866425

    P粉7138664252023-09-11 00:41:40

    您可以尝试这个函数,它会检查目录中的文件是否连续命名,然后重命名以使其始终编号,该函数返回新上传文件的下一个编号

    function get_next_file_number($target_dir)  {
    
        $files = scandir($target_dir);
        if (false === $files) {         // If false then is not a directory, you could throw an Exception here
            return -1;
        }
        $counter = 0;
        unset($files[0], $files[1]);    // Delete the . and .. from array
        natsort($files);                // Important! Sort file names naturally
        foreach ($files as $file) {
            ++$counter;
            $file_info = pathinfo($file);
            $file_name = $file_info['filename'];
            $extension = $file_info['extension'];
            if ($file_name != $counter) {
                $old_name = $target_dir . DIRECTORY_SEPARATOR . $file;
                $new_name = $target_dir . DIRECTORY_SEPARATOR . $counter . "." . $extension;
                if (!file_exists($new_name)) {
                    rename($old_name, $new_name);
                }
                else {
                    // Oops trying to rename to a file that already exists, this shouldn't happen!
                }
                //echo "renamed: " . $old_name . " to " . $new_name, "<br>";
            }
        }
        return $counter + 1;
    }

    如何实现?

    // .....
    // You can check the returned value, if it is -1 you know there was an error
    $next_number = get_next_file_number($target_dir);
    $new_target_file = $target_dir . $next_number . "." . $imageFileType;
    // Here you can make sure the file does not exists... just to make sure...
    // Here move the uploaded file with the next number
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $new_target_file)) {
        echo "The file ". htmlspecialchars( basename( $_FILES["fileToUpload"]["name"])). " has been uploaded.";
    }
    // .....

    Antwort
    0
  • StornierenAntwort