#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-тип вместе с ним.