Codeigniter: предпочтительный подход для хранения данных изображений в базе данных - PullRequest
0 голосов
/ 03 декабря 2011

Мне нужно хранить данные изображений в базе данных. Я загружаю изображения на сервер, а затем, конечно, мне нужно получить их из базы данных. Я знаю, что в базе данных я должен хранить только данные, оставляя фактические файлы в файловой системе, поэтому я пытаюсь подумать, какой из них может быть лучшим способом сохранить эти данные.

Больше всего меня беспокоит выбор схемы именования. В базе данных у меня просто будет столбец filename, в котором будет храниться только имя файла плюс расширение. Нет пути, поэтому я могу настроить его в своем приложении. Итак: что я буду использовать для имени файла? Я хотел бы сохранить осмысленное имя, поэтому было бы здорово сохранить название фотографии или хотя бы ее часть. Но чтобы обеспечить уникальность, какой из них может быть лучшим подходом?

Я знаю, что у Codeigniter есть помощник по работе со строками, но я также читал об использовании функции php uniqid. Затем я могу прикрепить идентификатор к имени картинки.

Что вы предлагаете?

Ответы [ 3 ]

1 голос
/ 03 декабря 2011

Не стесняйтесь хранить весь образ в вашей базе данных, если их не будет сотни тысяч (или вам просто нравится платить за дорогие диски 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']);

Удачи!;)

0 голосов
/ 03 декабря 2011

Хранение изображений в базе данных не очень хорошая идея, вместо этого храните ссылки на изображения в базе данных. Например; создать таблицу со следующими полями

  • image_id // уникальный идентификатор изображения
  • image_type // тип изображения ("png", "jpg", "gif" .....)
  • image_link // путь к папке, в которой находится изображение
  • дата загрузки // дата загрузки изображения (полезно при заказе в запросах к базе данных)

Вы можете добавить любое другое поле, которое хотите

0 голосов
/ 03 декабря 2011

Хорошо, я предпочитаю, чтобы вы использовали хеш в имени изображения, как это может случиться, если есть два изображения с одинаковым именем, и это создаст проблему в будущем.

Еще один совет: никогда не нужно хранить содержимое файла в базе данных, его стоимость намного выше, чем просто сохранить путь к этому файлу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...