Jak již bylo řečeno, blob
je správná cesta, nicméně jak SanHolo poukazuje na to, že to není opravdu výkonné a nakonec narazíte na problémy, protože vaše databáze může růst opravdu opravdu rychle!
Proč neindexujete název souboru v databázi a neuložíte soubor na server ?
Hlavním důvodem, proč něco takového nepovolit, by byly bezpečnostní problémy. Pokud se opravdu snažíte zakrýt své základy tím, že všem uživatelům neumožníte vidět nebo uchopit obsah, máte dvě možnosti.
Možnost A) dát souboru jedinečný, neidentifikovatelný název, jako to dělá Flickr. Název souboru obsahuje dva hashe. Uživatelský hash a souborový hash. Druhý hash je tajný a jediný způsob, jak ho získat, je pokus-omyl. Podívejte se na tento soubor, který mám na Flickru . Je chráněno uživatelem (vidí pouze rodina), ale budete k němu mít v pořádku přístup, protože samotná adresa URL slouží jako ochrana:http://farm2.static.flickr.com/1399/862145282_bf83f25865_b.jpg , i kdybyste se náhodně pokoušeli vygenerovat hash a našli platný, byl by skryt anonymitou, protože byste nevěděli, od koho to je.
Možnost B) k omezení přístupu použijte thecnology na straně serveru. Tato metoda je bezpečnější, ale pro server dražší. Nastavíte skript, který povolí/zakáže přístup k souboru na základě session_permissions nebo podobně. Podívejte se na následující kód, který by byl volán přístupem něco jako:
http://yourserver.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);