Intereting Posts
Php Script для проверки состояния TABLE LOCK в MySQL Кохана 3.2. – Как использовать дефис в URI? Codeigniter – данные сеанса не сохраняются в базе данных через массив Как я могу установить CURLOPT_CAINFO глобально для PHP в Windows? PHP ElasticSearch, как настроить отображение перед индексацией записей? динамически создавать текстовые области с уникальными идентификаторами на основе входных данных флажка Формирование даты и фильтров Yii Laravel orderBy whereHas PHP: удалить файл с любым расширением? Лучший способ создать правильную разметку для вставки в WordPress из PHP (импорт из другой CMS) Каков наилучший способ автоматического генерации getters и seters для класса в php? Использование одного и того же идентификатора сеанса в двух сценариях PHP одновременно Добавить значение для URL-адреса в форме Отправить с помощью JQuery Результат pg_query содержит строки вместо целых чисел, числовые Детальная форма электронной почты в Sencha Touch, предоставляющая исключение

Как отобразить изображение из mysql blob

Я пытаюсь отобразить изображение из поля BLOB MySQL. Я пробовал несколько разных вещей, и никто из них, похоже, не работает.

Я пытался:

  • header("Content-type: $type"); img src = $blobData;

  • header("Content-type: $type"); echo($blobData);

Другой вариант, который вы могли бы подумать (если вы на Apache):

Создайте файл .htaccess с mod_rewrite для всех расширений изображений (png, jpg, gif).

Переадресуйте его на php-скрипт, который ищет изображение, запрошенное в БД. Если он есть, он выделяет заголовок и БЛОГ. Если его нет, он возвращает стандарт 404.

Таким образом, вы можете:

 <img src="adorablepuppy.jpg" /> 

Что затем перенаправляется ala:

 RewriteEngine on RewriteRule \.(gif|jpg|png)$ imagelookup.php 

Этот скрипт выполняет запрос для изображения, который (очевидно) предполагает, что запрошенное изображение имеет уникальный ключ, который соответствует имени файла в URL-адресе:

  $url = $_SERVER['REQUEST_URI']; $url_parts = explode("/", $url); $image_name = array_pop($url_parts); 

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

Если это приносит результаты:

  header('Content-type: image/jpeg'); header('Content-Disposition: inline; filename="adorablepuppy.jpg"'); print($image_blog); 

в противном случае:

  header("HTTP/1.0 404 Not Found"); 

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

 <?php header("Content-type: $type"); echo $blobData; ?> 

Этот код выглядит отлично. Однако я слышал подобную жалобу от другого человека, и я смог устранить ее, убедившись, что:

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

  2. PHP-скрипт сохраняется как чистый текстовый файл ASCII, а не как кодированный файл Unicode / UTF-8. Кодированные файлы в формате Unicode / UTF-8 могут содержать подпись в качестве первых байтов. Эти байты будут невидимы в вашем текстовом редакторе, но сервер отправит эти несколько лишних байтов в браузер перед данными JPEG / GIF / PNG. Поэтому браузер будет искать неправильную подпись в начале данных. Чтобы обходной путь, создать пустой текстовый файл в блокноте, вставить в php-код и сохранить файл в кодировке ANSI.

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

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

 $image = mysql_fetch_array(...) header("Content-type: image/jpeg"); // change it to the right extension print $image['data']; 

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

а) держать их индексированными (duh!)
Вы можете сделать это, сохранив изображения на сервере и просто индексируя имя файла изображения.

б) сохранение скрытого / защищенного изображения
Flickr и все равно сохраняют изображения на сервере и используют другой подход. Они создают URL-адрес, который трудно найти.

Эта ссылка указывает на защищенное изображение в моей учетной записи. Вы можете получить доступ к нему, когда знаете правильный URL. Попробуй!

farm2.static – ферма, оптимизированная для доставки статического контента
1399 – возможно, сервер
862145282 – мое имя пользователя
bf83f25865_b – изображение

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

Тем не менее, нет никаких оснований хранить изображения на BLOB.

Редактировать:
Просто ссылка, указывающая на кого-то, что объясняла намного лучше, чем я, почему BLOB не подходит для хранения изображений.