Работа с загрузкой изображений (отслеживание) PHP - PullRequest
0 голосов
/ 28 февраля 2011

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

Система, которую я на данный момент кодировал, в основном записывает данные изображения (пути, размеры, дату и т. Д.) В строку БД при загрузке. Имена файлов изображений сгенерированы

md5( microtime() ) . $this->auth->user_id;
// 55bedba35a57c710e73fee21106006b71

и такие пути:

'./img/'.substr($file_name,0,1).'/'.substr($file_name,1,1).'/'.substr($file_name,2,1);
// /img/5/5/b

так что

// /img/5/5/b/55bedba35a57c710e73fee21106006b71.jpg

То есть для каждого «изображения» (исходного изображения). Я до сих пор не знаю, как записывать версии.

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

Есть ли что-нибудь (библиотека или что-то еще), которое может помочь мне соединить БД - разрыв файловой системы?

Я работаю с CodeIgniter, если это поможет

Заранее спасибо. Пожалуйста, дайте мне знать, если я не имел никакого смысла, хе.

EDIT

Я думаю о том, чтобы сохранить оригинал как блоб в базе данных, а затем сгенерировать варианты и поместить их все в одну папку. Таким образом, я думаю, что может быть проще восстановить все изображения в случае отсутствия изображений и удалить папку, чтобы удалить все файлы при необходимости. Это, вероятно, сделает мой размер БД невыносимым, нет? Что ты думаешь?

1 Ответ

0 голосов
/ 28 февраля 2011

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

Недостатком хранения изображений в базе данных является то, что для каждого изображения требуется скрипт PHP для его выполнения, что увеличивает нагрузку как на сервер базы данных, так и на веб-сервер.

Я бы порекомендовал использовать хеш для имени файла, например, md5 или sha1, и добавить к нему user_id, сохраняя хеш в базе данных.

$filename = md5_file($filename) . $extension;

Для версий у меня была бы таблица в базе данных, которая содержала бы четыре столбца + любые дополнительные метаданные, которые вы хотите сохранить.

Пример:

image_id | parent_image_id | user_id | hash
-------------------------------------------------------
1        | NULL            | 1       | AAAAAAAAAAAAAAAA
2        | 1               | 1       | BBBBBBBBBBBBBBBB
3        | 2               | 1       | CCCCCCCCCCCCCCCC

Тогда вы можете иметь несколько подверсий, если вы того пожелаете, ветвясь из любой версии.

Для файловой системы, для производительности, вы должны хранить файлы в структуре корзины ... если вы используете метод хеширования, вы можете сделать следующее ...

Скажите, что имя файла - "aabbccddeeff.jpg", вы должны хранить файл в папках следующим образом:

изображения / аа / бб / куб.см / дд / eeff.jpg

Это особенно важно, если у вас будут тысячи файлов изображений.

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