Namakan semula fail secara berurutan pada muat naik berdasarkan fail sedia ada dalam direktori
P粉310931198
P粉310931198 2023-09-10 13:14:12
0
1
564

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

membalas semua(1)
P粉713866425

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.";
}
// .....
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!