Heim > Fragen und Antworten > Hauptteil
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粉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."; } // .....