Привет, У меня есть таблица изображений в моей базе данных. Они сохраняются как blob вместе с такими деталями, как тип и имя изображения.
У меня проблема с изображением, все, что я получаю, это белая коробка с красным крестом. код:
<?php include '../connection.php'; $ID = $_GET['id']; $query = "SELECT * FROM `images` WHERE `image_id` = '$ID'"; $result=mysql_query($query); $row = mysql_fetch_array($result); $image = $row['image']; $image_type= $row['image_type']; header("Content-type: $image_type"); print $image; exit; ?>
благодаря
Ну вот короткий ответ.
<?php include '../connection.php'; $id = (int)$_GET['id']; $query = "SELECT * FROM `images` WHERE `image_id` = '$id'"; $result=mysql_query($query); $row = mysql_fetch_array($result); $image = $row['image']; $image_type= $row['image_type']; $size = $row['image_size']; //alternative /* list($image, $image_type, $size) = array( $row['image'], $row['image_type'], $row['image_size'] ); */ $ext = explode('/', $image_type); $name = $id . '.' . $ext[1]; header("Content-type: $image_type"); header("Content-length: $size"); header("Content-Disposition: attachment; filename=$name"); print $image; exit;
Проверьте свой blobtype как наименее MEDIUMBLOB, который способен хранить данные до 16M
Чтобы отладить это, я предлагаю закомментировать строку заголовка Content-type, а затем нажать URL-адрес непосредственно в браузере. Это позволит вам видеть любые ошибки, предупреждения или уведомления, которые может испускать PHP.
Несколько вещей, чтобы попробовать
возможно, что-то не работает, и он возвращает сообщение об ошибке в html вместо ожидаемого изображения
является content_type, сохраненным правильно в базе данных, или вы просто сохраняете расширение файла изображения
тип контента должен выглядеть примерно так:
image/gif image/jpeg
Похоже, это может сработать, что случилось?
Попробуйте явно указать поля:
SELECT image, image_type FROM ...
Что происходит, когда вы запускаете запрос из базы данных?
Загружаете ли вы изображение:
<img src="image.php?id=12">
Или вы загружаете PHP как свою собственную страницу?
возможно, вы могли бы попробовать
$row = mysql_fetch_assoc($result);
вместо
$row = mysql_fetch_array($result);
Вы сказали в комментарии, что таблица изначально сказала «[BLOB – 64.0 KiB]», но вы изменили ее на «MEDIUMBLOB». Это расширит размер, который вы можете сохранить, но все ваши существующие данные по-прежнему будут усечены до 64KiB.
Убедитесь, что тип поля, который вы используете, достаточно велик, чтобы хранить данные, которые вы хотите сохранить (16 МБ в MEDIUMBLOB или ~ 4gb в LONGBLOB, я уверен), а затем снова вставьте все ваши данные.
Помимо упомянутых проблем безопасности, я не понимаю, почему код не должен работать иначе, чем проблема с базой данных.
Или, если вы не хотите создавать отдельный php-файл, вы можете его встроить
<?php // retrieve blob into $img ?><img src='data:image/png;base64,<?php echo base64_encode( $img );?>' alt='Image <?php echo $id;?>'>