Wie gesagt, blob
ist jedoch der richtige Weg, da SanHolo darauf hinweist, dass es nicht wirklich leistungsmäßig ist und Sie schließlich auf Probleme stoßen werden, da Ihre Datenbank sehr, sehr schnell wachsen kann!
Warum indizieren Sie den Dateinamen nicht in der Datenbank und speichern die Datei auf dem Server ?
Der Hauptgrund, so etwas nicht zuzulassen, wären Sicherheitsprobleme. Wenn Sie wirklich versuchen, Ihre Basis zu decken, indem Sie nicht allen Benutzern erlauben, Inhalte zu sehen oder abzurufen, haben Sie zwei Möglichkeiten.
Option A) Geben Sie der Datei einen eindeutigen, nicht identifizierbaren Namen, wie es Flickr tut. Der Name der Datei umfasst zwei Hashes. Ein Benutzer-Hash und ein Datei-Hash. Der zweite Hash ist geheim und der einzige Weg, wie Sie ihn erhalten könnten, wäre durch Versuch und Irrtum. Werfen Sie einen Blick in diese Datei, die ich auf Flickr habe . Ist benutzergeschützt (nur die Familie kann sehen), aber Sie können problemlos darauf zugreifen, da die URL selbst als Schutz dient:http://farm2.static.flickr.com/1399/862145282_bf83f25865_b.jpg , selbst wenn Sie nach dem Zufallsprinzip versuchten, Hashes zu generieren und einen gültigen gefunden hätten, wäre er durch Anonymität verborgen, da Sie nicht wissen würden, von wem er stammt.
Option B) Verwenden Sie eine serverseitige Technologie, um den Zugriff zu beschränken. Diese Methode ist sicherer, aber teurer für den Server. Sie richten ein Skript ein, das den Zugriff auf die Datei basierend auf session_permissions oder ähnlichem erlaubt/verweigert. Sehen Sie sich den folgenden Code an, der aufgerufen würde, wenn Sie auf Folgendes zugreifen:
http://ihrserver.com/getprotectedfile.php?filename=213333.jpeg
session_start();
// logic to verify the user is ok
if($_SESSION['user_access']!=true) {
exit('user not allowed here');
// WATCHOUT! THIS IS NOT SECURE! EXAMPLE ONLY.
// on a production site you have to be sure that $filename will not point to a system file
$filename = $_GET['filename'];
// gets the file and outputs it to the user
header('Content-type: image/jpeg');
header('Content-Length: '.filesize($filename));
readfile($filename);