Я бы сказал, что магазин все изображения в папке изображения, а затем сохранить путь изображений в базе данных, например, если мы делаем сообщения и каждое сообщение имеет изображение, мы могли бы Загружайте image в /webroot/images/
и сохранить путь /webroot/images/someimage.jpg
в базе данных.
Если на веб-сайте будет много изображений, лучше сделать дальнейшую организацию, если тысячи файлов в одной папке не очень хорошие, особенно если вы собираетесь попробовать подключиться к ftp-файлу, то вы может добавить еще одну папку с идентификатором сообщения (в примере, который я упомянул), чтобы он стал, например, /webroot/images/[id]/image1.jpg
.
Если префикс всегда совпадает /webroot/images
вы можете игнорировать его в базе данных, чтобы сохранить некоторое дисковое пространство при условии, что приложение знает, где папка изображения есть, также вы можете игнорировать id
во втором примере, вид код будет что-то вроде этого
<img src='<?= IMAGES_FOLDER."/".$post->getId()."/".$post->getImageName() ?>' />
Ofcourse было бы неплохо добавить getImage()
функции в посте, что делает именно это, проверить пример:
public function getImage()
{
return IMAGES_FOLDER."/".$this->getId()."/".$this->getImageName();
}
img
тега будет чище
<img src='<?= $post->getImage() ?>' />
PS: Сохранение изображений в базе данных крайне неэффективно, так как база данных, как правило, бутылочное горлышко применения, хранение изображений было бы увеличить размер базы данных, и будет делать больше обращений при обращении к любому изображению на веб-сайте, не говоря уже о том, чтобы открыть любое изображение, необходимое для запуска скрипта php (или любого другого языка), чтобы служить этому изображению, что увеличило бы использование ОЗУ на сервере.
Кроме того, поскольку вы упомянули, что пользователи загружают изображения, избегайте хранения изображений с тем же именем, которое они загружают, что делает вещи глупыми, особенно с длинными именами и именами, которые используют пробелы и прочее, я обычно обрабатываю это делая md5
для имени изображения или генерируя случайную строку, а также md5
, он сохраняет постоянную длину строки и выглядит более чистым, не забудьте дважды проверить наличие изображения, чтобы избежать его перезаписывания.
Конечно, все имена, которые я предложил, предназначены только для примеров, вы можете использовать имена, подходящие для вашего приложения.
Если бы я не был на работе, я бы дал вам расширенный ответ на это, но в моей компании MVC (модифицированная версия CodeIgniter) храню изображения в поле longblob в mySQL (в основном храня данные необработанного изображения) и отображать эти изображения через скрипт php.Например, если бы я хотел получить изображение с идентификатором из 1 из базы данных, я бы пошел в/image/1, и он отобразил бы это изображение. Про хранить это в базе данных - это то, что я могу манипулировать и затем кэшировать эти данные, что хорошо для таких сайтов изображений, как ваш. Наша система расширяется для/image/1/resize/100/100 и автоматически кэшируется для скорости – SixteenStudio