Renommer séquentiellement les fichiers lors du téléchargement en fonction des fichiers existants dans le répertoire
P粉310931198
P粉310931198 2023-09-10 13:14:12
0
1
664

J'utilise ce code de téléchargement (php) que j'ai trouvé en ligne pour le formulaire de téléchargement d'image.

Je me rends compte qu'il y a déjà beaucoup de questions/réponses sur le site concernant le "renommer les fichiers" lors du téléchargement, et j'ai fait pas mal de recherches à ce sujet.

Jusqu'à présent... aucun d'entre eux ne semble répondre spécifiquement à ce que je veux faire.

J'espère que cela pourra être réalisé en ajustant le code que j'utilise.

À terme... J'aimerais pouvoir télécharger un seul fichier (pas plusieurs) et que les fichiers soient automatiquement nommés avec un simple numéro, par exemple 1, 2, 3, 4 ou 5 etc...

Pas de préfixe et pas d'extension. Juste la valeur numérique du nom.

Cependant, j'aimerais que le code vérifie d'abord le répertoire cible pour analyser quels fichiers "nom" existent déjà.

Donc, si les fichiers existants dans le répertoire sont 1, 2, 3, 4 et 5..., les nouveaux fichiers seront automatiquement nommés 6 dans l'ordre et ainsi de suite.

Cependant, si les fichiers existants dans le répertoire sont 1, 2, 4 et 5 (3 n'existe pas), le nouveau fichier sera téléchargé en tant que 3 pour conserver l'ordre.

Alternativement, pour mes besoins particuliers, cela ne me dérange même pas si toutes les images du répertoire sont renommées lors d'un nouveau téléchargement. Changer essentiellement l’ordre afin que la séquence des nombres soit préservée.

Voici le code de téléchargement que j'utilise actuellement :

<?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粉310931198
P粉310931198

répondre à tous(1)
P粉713866425

Vous pouvez essayer cette fonction, elle vérifiera si les fichiers du répertoire sont nommés consécutivement puis les renommera pour qu'ils soient toujours numérotés, la fonction renvoie le numéro suivant du fichier nouvellement téléchargé

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;
}

Comment mettre en œuvre ?

// .....
// 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.";
}
// .....
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal