Не стесняйтесь хранить весь образ в вашей базе данных, если их не будет сотни тысяч (или вам просто нравится платить за дорогие диски SCSI :)).Если вы не уверены, с файловой системой тоже все в порядке.
Для уникального идентификатора изображения, вероятно, лучше всего просто использовать идентификатор вставки в БД (гарантированно уникальный, без многопоточности / столкновения / плача).Итак, вот хороший подход, предполагая, что вы хотите сохранить изображения в файловой системе:
create table images (
image_id int(20) primary key auto_increment, /* assumes mysql */
file_path varchar(2500) not null, /* the actual file name and full path */
file_label varchar(255), /** user's memorable name for the file */
description varchar(2500), /** user provided description of contents */
media_type varchar(100), /** something like image/jpeg; privided by php in upload */
);
Тогда вы, вероятно, захотите связать image_id с какой-либо категоризацией или тегами, user_id и т. Д.
РЕДАКТИРОВАТЬ
Добавлено для комментариев:
Вы всегда можете создавать свои ссылки, используя реальное имя файла, если хотите, даже если вы храните их как простыеидентификатор изображения в вашей файловой системе.Вам просто нужно использовать дружественные для поиска URL , чтобы сделать что-то вроде этого (где 1234 - это идентификатор изображения и / images / перенаправляет на ваш PHP-скрипт):
mysite.com/images/db/1234/picture_of_a_cat.jpg)
Затем вы просто перенаправляете/ images / db / к вашему php-скрипту.Альтернативно, если вы не хотите пытаться переписать их, вы можете просто использовать $ PATH_INFO.
Например, если у вас есть mysite.com/images/render.php/1234/picture_of_cat.jpg:
<?php
$parts = explode("/",$PATH_INFO);
$image_id = $parts[3];
$image_from_db = null; //fetch the row from your dabatase here!
header("Content-type: ".$image_from_db['media_type']);
echo file_get_contents($image_from_db['file_path']);
Удачи!;)