Как вставить изображения в базу данных, извлечь их из базы данных и отобразить с помощью PHP?

#php #mysql #forms #post #file-upload

#php #mysql #формы #Публикация #загрузка файла

Вопрос:

Как мне вставить изображения в базу данных, извлечь их из базы данных и отобразить с помощью PHP?

Я пытался много раз, поскольку я новичок в php, пожалуйста, помогите мне.

Комментарии:

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

2. Мигран, если вы разместите свой веб-сайт на дешевом хостинге, вы не получите права apache (или IIS) на запись. Вам придется хранить загруженные файлы в базе данных.

3. @nash Звучит как дерьмовый хост.

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

5. Почти каждый хост предоставляет права на запись, если один из них этого не делает, вам не следует размещать у них. Вы получили доступ к панели управления?

Ответ №1:

Вы можете использовать BLOB-поле для хранения двоичных данных, но, пожалуйста, имейте в виду, что производительность может быть умеренной. Почти всегда лучше сохранить изображение в виде файла на диске и просто сохранить имя файла в базе данных. Чтобы извлечь изображение из базы данных, вам нужно будет прочитать все изображение в памяти, что является пустой тратой ресурсов. Лучше переложить обработку изображений на веб-сервер, который может передавать изображение клиенту в потоковом режиме.

Ответ №2:

Несмотря на то, что это не рекомендуемая практика, если вы настроены на это, в Интернете есть куча руководств, которые расскажут вам, как это сделать:

Комментарии:

1. Я понял, что сохранение имени пути лучше, чем хранение изображения в базе данных. Любые способы, большое вам спасибо.

Ответ №3:

Вы можете создать таблицу следующим образом:

 CREATE TABLE `image` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `filename` varchar(128) COLLATE utf8_unicode_ci NOT NULL,
    `mime_string` varchar(128) COLLATE utf8_unicode_ci NOT NULL,
    `data` longblob NOT NULL,
    `data_size` int(11) NOT NULL,
    `hash` varchar(64) COLLATE utf8_unicode_ci NOT NULL,
    `compressed` tinyint(4) NOT NULL,
    `remote_id` int(11) DEFAULT NULL,
    `created_at` datetime DEFAULT NULL,
    `updated_at` datetime DEFAULT NULL,
    PRIMARY KEY (`id`),
    KEY `image_I_1` (`hash`),
    KEY `image_I_2` (`remote_id`)
) ENGINE=InnoDB AUTO_INCREMENT=125 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ROW_FORMAT=COMPACT
  

Когда вы записываете файл обратно в выходные данные, вам нужно будет указать тип содержимого HTTP-заголовка
аналогично типу mime:

 header( 'Content-type', 'image/png' );
  

Именно поэтому вы сохраняете mime-тип вместе с ним.