Я пытаюсь отобразить изображение из поля 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; ?>
Этот код выглядит отлично. Однако я слышал подобную жалобу от другого человека, и я смог устранить ее, убедившись, что:
PHP-скрипт не выводит никаких дополнительных символов до или после отправки данных двоичного изображения.
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 не подходит для хранения изображений.