Warum nicht einfach den SHA-1 des Inhalts generieren und diesen als Dateinamen verwenden (ungefähr so, wie git
Objekte in einem Repository speichert loose object database)? Ich möchte normalerweise keine Blobs in das RDBMS einfügen. es ist ein wenig klobig und Sie müssen sicherstellen, dass das Blob-Feld genug Platz für die Art von Dateigrößen hat, mit denen Sie arbeiten möchten. Außerdem ist das Dateisystem für die Verarbeitung von Dateien optimiert. Daher ist es sinnvoll, ein spezielles Verzeichnis auf dem Server zu führen, auf den der Webserver Schreibzugriff hat. Dann schreiben Sie die Dateien dort und speichern Referenzen auf sie in der Datenbank. Hier ein Beispiel:
// Read the contents of the file and create a SHA-1 hash signature.
$tmpPath = $_FILES['image']['tmp_name'];
$blob = file_get_contents($tmpPath);
$name = sha1($blob) . '.img'; // e.g. b99c6e26c3775fca9918ad614b7be7fe4fd7bee3.img
// Save the file to your server somewhere.
$dstPath = "/path/to/imgdb/$name";
move_uploaded_file($tmpPath,$dstPath);
// TODO: insert reference (i.e. $name) into database somehow...
Und ja, Forschungen haben broken SHA-1, aber man konnte leicht einige Vorkehrungen gegen das schreiben, wenn Sie paranoid genug sind (zB auf einem vorhandenen Upload mit dem gleichen Hash, es ist der Inhalt unterscheidet, einfach mutieren/an den Namen ein wenig anhängen, um es zu ändern). Sie identifizieren das Bild im Backend nicht anhand seines Inhalts: Sie benötigen lediglich einen eindeutigen Namen. Sobald Sie das haben, schauen Sie einfach von der DB nach, um den Dateipfad auf dem Datenträger herauszufinden, der den tatsächlichen Bilddaten entspricht.
Wenn Sie erwarten, dass die Bilddateien ziemlich groß sind, können Sie mit dem 4. Parameter auf file_get_contents()
begrenzen, wie viel Sie in den Speicher lesen.
Was meinst du mit * eindeutiges Ergebnis *? Die Funktion gibt nur den Inhalt der Datei zurück. Wenn die Datei nicht geändert wird, ist sie nie eindeutig. – Soaku
'Der Grund ist, ich möchte jedem Foto einen eindeutigen Namen geben': - 'file_get_contents()' wird das nicht tun.Es gibt Ihnen den Inhalt der Datei –
danke, aber dann wie kann ich die Fotos speichern in der Tabelle Spalte Typ Longblob mit eindeutigen Namen? Ich konnte die Fotos nicht speichern und drucken, wenn ich varchar (mit eindeutigem Namen) verwende – cyberspacelogin