Bildnamen anpassen bei doppelte...

DaveThuet

Erfahrenes Mitglied
Guten Morgen liebe PHP-Profis,

ich habe wiedermal ein kleines Anliegen das ich nicht gebacken kriege, es geht um folgendes Vorhaben...
Ich möchte das mein Multiuploader die hochzuladene Datei umschreibt im Falle das bereits eine Datei mit den selben Namen bereits im Root vorhanden ist.

Das klappt nun auch alles soweit sehr gut, nur möchte ich nun das es die Bilder anders benennt.

Im Moment wird den Bildern mit selben Namen folgendes hinzugefügt "(1) " also "(1) Bild.jpg" weill "Bild.jpg" bereits vorhanden ist und sollte nochmals ein selbes Files kommen heisst diese dann "(2) (1) Bild.jpg" u.s.w.

Wie kann ich dies lösen das es die Zahlen aufwärts Rechnet als einfach zu "(2) Bild.jpg" macht und dann zu "(3) Bild.jpg" zusätzlich wollte ich auch noch fragen wie bringe ich die Zahl in den Klammern vor der Endung also am Ende des Bildnamen vor ".jpg"?

PHP:
if($_REQUEST["chunk"] == 0) {
	$zaehler = 1;
while (file_exists($targetDir."/".$fileName))
	{
	$fileName = "(".$zaehler.") ".$fileName;
	$zaehler++;
	}
Ich wäre sehr dankbar für Eure Hilfe, da ich mich einfach mit PHP nicht auskenne.
 
Also so klappt es bei mir:

PHP:
<?php

$dateiname = "Bild.jpg";
$nummer = 1;

if (file_exists($dateiname)) {
    while (file_exists("(" .$nummer .")" .$dateiname)) {
        $nummer++;
    }

    echo "Neuer Name (" .$nummer .")" .$dateiname;
} else {
    echo "Datei noch nicht vorhanden!<br />";
    echo "Neuer Name (1)" .$dateiname;
}

?>

Abgesehen davon würde ich die Zahl lieber ans Ende des Namens hängen ("Bild 1", "Bild 2", ...) dadurch werden diese Bilder beim Sortieren trotzdem zusammen mit dem Originalbild angezeigt!
 
Guten Morgen tombe,

erstmals danke für deine sehr rasche Antwort, leider klappt es bei mir nicht...
Ich müsste den kompletten Rest der Codierung anpassen und das kann ich nicht.
Die Bilder liegen noch nicht im Root, sie werden im Moment des Uploads geprüft und liegen deshalb in einem temporären Ordner.
Hast du eine Idee wie es mit meinem bestehenden Code klappen könnte damit die Zahlen aufsteigend wären und vor der ".jpg" eingesetzt werden und nicht am Anfang des Bildnamen?

Ich danke vielmals für weitere Hilfe in dieser Angelegenheit.
 
Zuletzt bearbeitet:
Du hast im Dateinamen der neu gebildet wird ein Leerzeichen welches falsch ist!!

Aber der Code mit Zahl am Ende sieht dann so aus:

PHP:
<?php
$fileName = $orig_fileName = substr("Bild.jpg", 0, strlen("Bild.jpg")-4);
$targetDir = "Dein_Pfad_zu_den_Bildern";
$zaehler = 1;

while (file_exists($targetDir."/".$fileName .".jpg"))
    {
    $fileName = $orig_fileName ."(".$zaehler.")";
    $zaehler++;
    }
echo $fileName;
?>

Du musst

a) den Originalnamen zwischenspeichern um daraus immer den neuen Namen mit der nächst höheren Zahl zu bilden.

b) den Namen ohne Endung ermitteln damit du die Zahl ans Ende stellen kannst.

c) die Zählvariable bereits mit dem Wert 1 belegen bevor du die WHILE Schleife ausführst.
 
Hallo tumbe,

ich möchte mich bei dir bedanken für deine gebotene Hilfe, leider bringe ich es so nicht hin. :(
Ich habe nun folgende Lösung gebastelt allerdings habe ich das Hochzählen der Zahlen in der Klammer (...) noch nicht hingebracht.
Aber wenigsten wird mir nun die hochgeladenen Bildnamen in der richtigen Reihenfolge geschrieben, also zum Beispiel: "Mein Bild.jpg" gleicher Upload = "Mein Bild (1).jpg".
Komischerweise zählt er dann beim dritten identisch benannten Bild so: "Mein Bild (1) (2).jpg"?! :(
PHP:
$pfad_info = pathinfo("$fileName");
if ($_REQUEST["chunk"] == 0) {
    $zaehler = 1;
while (file_exists($targetDir."/".$fileName))
    {
    $fileName = substr($fileName, 0, -4) . " (".$zaehler.")" . "." . $pfad_info['extension'];
    $zaehler++;
    }
Vielleicht weisst du ein Lösung für das Zählen...?
 
Was klappt mit meinen Beispiel denn nicht?
Du must doch nur den fest vergebenen Dateinamen "Bild.jpg" durch den entsprechenden Namen bzw. eine Variable die ihn enthält ersetzen!
 
Guten Abend tombe,

ich möchte mich vorerst für die späte Antwort entschuldigen, ich war geschäftlich Unterwegs.
Mein Problem ist das der Bildname eigentlich ja noch gar nicht bekannt ist, da dies bereits beim Mehrfachuploader geschehen soll mit der Umbenennung.
Dazu muss ich zugeben das wie ich bereits erwähnte meine PhP-Kenntnisse leider absolut unter jeglichem Niveau sind... :(
Klar ich könnte einen Informatiker fragen und der würde mir dies sicher auch machen aber wahrscheinlich gegen eine riesen Rechnung und im Moment habe ich es nicht auf der lockeren Kannte. Gerne würde ich den ganzen Code senden aber ich glaube das sind Connection drinnen, die zu Missbrauch verwendet werden könnten. :(
Anbei nochmals was gut Funktioniert solange nicht 3 mal der selbe Bildname hochgeladen wird:
PHP:
$pfad_info = pathinfo("$fileName"); 
	
	// Prüfen ob das file existiert und sonst umbenennen
if ($_REQUEST["chunk"] == 0) {
    $zaehler = 1;
while (file_exists($targetDir."/".$fileName))
    {
    $fileName = substr($fileName, 0, -4) . " (".$zaehler.")" . "." . $pfad_info['extension']; // Originalzeile war: $fileName = "(".$zaehler.") ".$fileName; 
    $zaehler++;
    }
Erst beim dritten identischen Bildnamen macht dann das Script kommischerweise keine kumulierung mehr sondern setzt einfach eine (1) davor, also gemäss meinem letzten Post vom 24.09.11, 13:30.
 
Zurück