PHP-Datei umbenennen

8

Ich habe ein Formular, bei dem ein Administrator drei Bilder mit verschiedenen Dimensionen in drei verschiedene Verzeichnisse hochladen kann. jetzt um sicherzustellen, dass ich nicht in das Problem der doppelten Dateinamen bekomme ich implementiert so etwas wie der PHP wird den hochgeladenen Dateinamen vergleichen und es wird prüfen, ob dieser Dateiname im angegebenen Verzeichnis vorhanden ist, wenn ja, dann wird es einen Fehler widerhallen und stoppen Sie die Skriptausführung.

Nun hat mir einer meiner Freunde vorgeschlagen, dass es sehr schlecht ist, den Administrator aufzufordern, die Bilddatei manuell umzubenennen und sie zu bitten, sich um das Datenduplikationsproblem zu kümmern. Die von ihm vorgeschlagene Lösung bestand darin, die Datei automatisch umzubenennen und sie dann in der Datenbank zu speichern und dann in das Verzeichnis zu leiten.

Ich bin verwirrt darüber, welche Kombination ich der umbenannten Datei geben soll und stelle sicher, dass es ein eindeutiger Dateiname bleibt, um genauer zu sein, ich möchte, dass Sie meine Verzeichnisstruktur verstehen

Wie ich schon sagte, gibt es drei Bilderdateien, die der Admin nämlich hochladen wird

  

a) Titelbild b) Kurzes Bild c)   Detailbild

und alle drei Bilddateien werden in das jeweils andere Verzeichnis verschoben, so wie das Titelbild zum Titelverzeichnis und so weiter.

Ich benutze, um unten zu schreiben, nur um den Dateinamen mit dem Pfad zu verschieben und zu speichern, der varchar in der Datenbank verwendet.

%Vor%

Das ist nur der Beispielcode. Ich habe die Validierungsfunktion, die ich verwende, nicht enthalten. Ich dachte, ich möchte alle Dateien umbenennen wie

a) Im Titelverzeichnis sollte die Datei als gespeichert werden. title_1.jpg title_2.jpg titel_3.jpg title_4.jpg

und so weiter

und der gleiche Weg zum Rest der Bilder. wie mache ich das? Welche Funktion nutze ich, um mein Ziel zu erreichen? und wenn dies nicht die gute Möglichkeit ist, die Datei umzubenennen, würde ich mich über jeden möglichen Vorschlag freuen, um die Datei umzubenennen.

Danke im Voraus

    
Ibrahim Azhar Armar 03.09.2010, 12:45
quelle

4 Antworten

2

Nun, hier ist eine mögliche Lösung:

  1. Laden Sie den hochgeladenen Dateinamen von $_FILES["ns_pic_title"]["name"] und separater Erweiterung ODER wenn wir nur über Bilddateien sprechen, erhalten Sie den Bildtyp mit getimagesize($_FILES["ns_pic_title"]["tmp_name"]) ;
  2. Überprüfen Sie Ihre Datenbank auf die maximale ID der Bilddatensätze und machen Sie die $file_name Variable 'title_'.($max_id + 1)
  3. An dieser Stelle sollten Sie $ file_name und $ file_extension haben, also move_uploaded_file($_FILES["ns_pic_title"]["tmp_name"], $ns_title_target.$file_name.'.'.$file_extension)

Hoffentlich macht das Sinn und hilft.

    
janosrusiczki 03.09.2010, 12:57
quelle
2

Es gibt ein paar gute Möglichkeiten mit verschiedenen Vor- und Nachteilen.

Brandon Horsley 03.09.2010 12:54
quelle
2

Anstatt Logik zu haben, um herauszufinden, was der neueste Bildname ist und das nächste Zahleninkrement zu berechnen, warum nicht einfach PHP tempnam () -Funktion ? Es erzeugt einen eindeutigen Namen mit einem Präfix Ihrer Wahl (d. H. "Title", "brief", "detail"). Sie könnten auch einfach einen Zeitstempel dem Dateinamen voranstellen - wenn Sie nicht viele Administratoren gleichzeitig Bilder hochladen lassen, sollte dies die meisten Namenskonflikte behandeln.

Da Ihre Bilder in die Verzeichnisse title , brief und detail bereits sortiert werden, ist es nicht wirklich notwendig, jedes Bild title_* , brief_* und detail_* zu nennen, oder? Wenn es im Titelverzeichnis ist, dann ist es offensichtlich ein Titelbild.

Außerdem werden Sie die Dateinamen in die Datenbank einfügen. Wenn Sie ein Bild anzeigen möchten, nehme ich an anderer Stelle in der App an, dass Sie den richtigen Dateinamen aus der Datenbank erhalten. Es ist also nicht wirklich wichtig, was der tatsächliche Dateiname ist, solange die Anwendung weiß, wo sie zu finden ist. Wenn dies korrekt ist, ist es nicht notwendig, einen sehr freundlichen Namen zu haben, daher wäre ein Dateiname von tempnam () oder ein Zeitstempel plus der ursprüngliche Dateiname akzeptabel.

    
Jeff 03.09.2010 12:56
quelle
0

Da Sie Referenzen in der DB speichern, würde ich es vorziehen, einfach die Datetime zu md5 zu verwenden und diese für den Dateinamen zu verwenden und den Disk-Dateinamen auch in der DB zu speichern. Es spielt keine Rolle, welcher Name auf die Festplatte geschrieben wird, solange Sie mit dem eindeutigen Namen auf die Datenbank verweisen können.

Ich verwende diese Methode, und in keinem meiner Tests erfordert der Festplattenname (md5 von datetime) mehrere Versuche.

    
Micah 23.07.2013 16:04
quelle

Tags und Links