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
Nun, hier ist eine mögliche Lösung:
$_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"])
; $file_name
Variable 'title_'.($max_id + 1)
move_uploaded_file($_FILES["ns_pic_title"]["tmp_name"], $ns_title_target.$file_name.'.'.$file_extension)
Hoffentlich macht das Sinn und hilft.
Es gibt ein paar gute Möglichkeiten mit verschiedenen Vor- und Nachteilen.
Verwenden Sie die temporary von php, wenn Sie die Datei verschieben und den Pfad in Ihrer mysql-Datenbank speichern . tempnam
erzeugt einen eindeutigen Dateinamen.
Verwenden Sie mysql, um den Bildinhalt in einem Blob zu speichern . Auf diese Weise greifen Sie auf den Bildinhalt über eine ID anstelle eines Pfadnamens zu.
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.
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.
Tags und Links php