PHP-Umbenennung Dateiname, falls vorhanden, Nummer an Ende anhängen

Lesezeit: 4 Minuten

Ich versuche, den Dateinamen eines Bildes umzubenennen, wenn es hochgeladen wird, falls es existiert, sagen wir, ob mein Dateiname lautet test.jpg und es existiert bereits, in das ich es umbenennen möchte test1.jpg und dann test2.jpg usw. Mit dem Code, den ich geschrieben habe, ändert sich mein Dateiname so test1.jpg und dann test12.jpg Jeder Rat zur Behebung dieses Problems wäre großartig, danke!

PHP

$name = $_FILES['picture']['name'];
$actual_name = pathinfo($name,PATHINFO_FILENAME);
$extension = pathinfo($name, PATHINFO_EXTENSION);

$i = 1;
while(file_exists('tmp/'.$actual_name.".".$extension))
{           
    $actual_name = (string)$actual_name.$i;
    $name = $actual_name.".".$extension;
    $i++;
}

  • Löschen Sie die Variable $actual_name, die einmal verwendet wurde, da es sich um eine Schleife handelt, indem Sie Folgendes tun: $actual_name = ”

    – Aravind. HU

    21. April 2013 um 21:47 Uhr


  • Du könntest den Namen mit testen $i in dem while Schleife .. wie in "tmp/".$actual_name.$i.".".$extension und den Wert schaffen $name nach der While-Schleife $name = "tmp/".$actual_name.$i.".".$extension

    – dbf

    21. April 2013 um 21:49 Uhr


  • Ich bin normalerweise nicht so, aber Sie sollten wirklich darüber nachdenken, meine Antwort auszuprobieren und sie zur akzeptierten zu machen. schönen Tag noch 🙂

    – ConnectedMind

    18. Januar um 15:19 Uhr

Hier ist eine kleine Änderung, die meiner Meinung nach das tun sollte, was Sie wollen:

$actual_name = pathinfo($name,PATHINFO_FILENAME);
$original_name = $actual_name;
$extension = pathinfo($name, PATHINFO_EXTENSION);

$i = 1;
while(file_exists('tmp/'.$actual_name.".".$extension))
{           
    $actual_name = (string)$original_name.$i;
    $name = $actual_name.".".$extension;
    $i++;
}

  • Lief wie am Schnürchen. Sie sind mein Held

    – ucMedia

    21. Mai 2020 um 13:40 Uhr

  • Es sieht so aus, als ob diese Antwort immer um 1 angehängt wird, also: foo.bar -> foo1.bar -> foo11.bar usw. Technisch funktioniert es, aber jeder, der vorher mit Dateien gearbeitet hat, würde erwarten, dass die Zahl zunimmt (foo2.bar ) und nicht nur anhängt.

    – ConnectedMind

    14. Januar um 12:26 Uhr


Benutzer-Avatar
Fandi Susanto

Inspiriert von @Jason answer habe ich eine Funktion erstellt, die ich für ein kürzeres und besser lesbares Dateinamenformat hielt.

function newName($path, $filename) {
    $res = "$path/$filename";
    if (!file_exists($res)) return $res;
    $fnameNoExt = pathinfo($filename,PATHINFO_FILENAME);
    $ext = pathinfo($filename, PATHINFO_EXTENSION);

    $i = 1;
    while(file_exists("$path/$fnameNoExt ($i).$ext")) $i++;
    return "$path/$fnameNoExt ($i).$ext";
}

Beispiel:

$name = "foo.bar";
$path="C:/Users/hp/Desktop/ikreports";
for ($i=1; $i<=10; $i++) {
  $newName = newName($path, $name);
  file_put_contents($newName, 'asdf');
}

Neue Version (2022):

function newName2($fullpath) {
  $path = dirname($fullpath);
  if (!file_exists($fullpath)) return $fullpath;
  $fnameNoExt = pathinfo($fullpath,PATHINFO_FILENAME);
  $ext = pathinfo($fullpath, PATHINFO_EXTENSION);

  $i = 1;
  while(file_exists("$path/$fnameNoExt ($i).$ext")) $i++;
  return "$path/$fnameNoExt ($i).$ext";
}

Verwendungszweck:

for ($i=1; $i<=10; $i++) {
  $newName = newName2($fullpath);
  file_put_contents($newName, 'asdf');
}

  • Es sieht so aus, als ob diese Antwort immer nur mit ‘(1)’ angehängt wird, also: foo.bar -> foo (1).bar -> foo (1) (1).bar usw. Technisch funktioniert es, aber jeder, der damit gearbeitet hat Dateien vorher erwarten, dass die Zahl steigt (foo (2).bar) und nicht einfach anhängt.

    – ConnectedMind

    14. Januar um 12:31 Uhr

  • “es sieht aus wie”? Hast du es versucht? Vielleicht hast du es falsch verwendet.

    – Fandi Susanto

    17. Januar um 3:46

  • Ich habe selbst eine Antwort gegeben, dort sollten Sie den Unterschied sehen können.

    – ConnectedMind

    18. Januar um 15:16 Uhr

Es gibt mehrere Möglichkeiten, Bilder in PHP umzubenennen, bevor sie auf den Server hochgeladen werden. Anhängen von Zeitstempel, eindeutiger ID, Bildabmessungen plus Zufallszahl usw. Sie können sie alle sehen hier

Überprüfen Sie zunächst, ob der Bilddateiname im gehosteten Bildordner vorhanden ist, andernfalls laden Sie ihn hoch. Die While-Schleife prüft, ob der Name der Bilddatei existiert, und hängt eine eindeutige ID an, wie unten gezeigt …

function rename_appending_unique_id($source, $tempfile){

    $target_path="uploads-unique-id/".$source;
     while(file_exists($target_path)){
        $fileName = uniqid().'-'.$source;
        $target_path = ('uploads-unique-id/'.$fileName);
    }

    move_uploaded_file($tempfile, $target_path);

}

if(isset($_FILES['upload']['name'])){

    $sourcefile= $_FILES['upload']['name'];
    tempfile= $_FILES['upload']['tmp_name'];

    rename_appending_unique_id($sourcefile, $tempfile);

}

Überprüfen Sie mehr Bild Umbenennungstaktik

Benutzer-Avatar
verbundenGeist

Ich habe SO überprüft und hier eine nette C#-Antwort gefunden, also habe ich sie für PHP portiert:

['extension' => $extension] = pathinfo($filePath);
$count = 0;
while (file_exists($filePath) === true) {
    if ($count === 0) {
        $filePath = str_replace($extension, '[' . ++$count . ']' . ".$extension", $filePath);
    } else {
        $filePath = str_replace("[$count].$extension", '[' . ++$count . ']' . ".$extension", $filePath);
    }
}

1090430cookie-checkPHP-Umbenennung Dateiname, falls vorhanden, Nummer an Ende anhängen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy