2017-07-08 4 views
0

Ich bin neu in PHP und möchte Sie um Hilfe bitten, ein eindeutiges Ergebnis von file_get_contents() zurückgeben. Der Grund ist, dass ich jedem Foto einen eindeutigen Namen geben möchte, so dass es später möglich sein wird, nur eines von ihnen und nicht alle zu löschen.Wie file_get_contents ein eindeutiges Ergebnis zurückgeben

$file =addslashes(file_get_contents($_FILES['image']['tmp_name'][$key])); 

Leider hilft time() und microtime() in dieser Situation nicht.

+0

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

+1

'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 –

+0

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

Antwort

0

Vielleicht wird dies Ihnen helfen: http://php.net/manual/en/function.uniqid.php

uniqid();

$ imageName = $ imageName. "_". uniqid();

+0

Wie soll das helfen? –

+0

Er kann zum Dateinamen uniq id – Bluesky

+0

hinzufügen Also schreibe das in deiner Antwort, warum sollte ich dich bitten, deine Antwort in Kommentaren zu erklären? –

0

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.

+0

Vielen Dank! Ich werde versuchen, dies in meinem Code zu implementieren und ein Feedback geben. Scheint wirklich gut! – cyberspacelogin

Verwandte Themen