Rumah > Soal Jawab > teks badan
Saya menggunakan kod muat naik (php) ini yang saya temui dalam talian untuk borang muat naik imej.
Saya sedar sudah ada banyak soalan/jawapan di laman web tentang "menamakan fail" semasa memuat naik, dan saya telah melakukan sedikit kajian tentangnya.
Setakat ini...tiada satu pun daripada mereka nampaknya menangani secara khusus apa yang saya mahu lakukan.
Semoga ini dapat dicapai dengan melaraskan kod yang saya gunakan.
Akhirnya... Saya ingin dapat memuat naik satu fail (bukan berbilang) dan menamakan fail secara automatik dengan nombor mudah, cth; 1, 2, 3, 4 atau 5 dll...
Tiada awalan dan tiada sambungan. Hanya nilai berangka nama.
Namun, saya ingin kod itu menyemak direktori sasaran terlebih dahulu untuk mengimbas fail "nama" yang sudah wujud.
Jadi jika fail sedia ada dalam direktori adalah 1, 2, 3, 4 dan 5..., fail baharu secara automatik akan dinamakan 6 mengikut urutan dan seterusnya.
Namun, jika fail sedia ada dalam direktori adalah 1, 2, 4 dan 5 (3 tidak wujud), fail baharu akan dimuat naik sebagai 3 untuk mengekalkan susunan.
Sebagai alternatif, untuk keperluan khusus saya, saya tidak kisah jika semua imej dalam direktori dinamakan semula dengan muat naik baharu. Pada asasnya menukar susunan supaya urutan nombor dikekalkan.
Ini ialah kod muat naik yang sedang saya gunakan:
<?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
Anda boleh mencuba fungsi ini, ia akan menyemak sama ada fail dalam direktori dinamakan berturut-turut dan kemudian menamakan semula mereka supaya sentiasa bernombor, fungsi itu mengembalikan nombor seterusnya bagi fail yang baru dimuat naik
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; }
Bagaimana untuk melaksanakan?
// ..... // 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."; } // .....