Итак, что дано: 1. Код для загрузки картинки: PHP: <form method="post" action="photo_manager.php?action=upload" enctype="multipart/form-data"> <input type="file" name="pht"> <input type="submit" name="upl" value="Çàãðóçèòü"> </form> <?php require ("../classes/class_db.php"); $db = new db(); $db->db_select(); if (isset($_POST["upl"])) { $type = substr($_FILES['pht']['type'], 0, 5); if ($type !== "image") die(); $size = round($_FILES["pht"]["size"]/1000, 2); if ($size > 500.00) die(); $file = file_get_contents($_FILES["pht"]["tmp_name"]); $file = mysql_escape_string($file); $db->query("INSERT INTO menu_photos (item_parent_id, item_photo) VALUES (1, '$file')"); echo mysql_error(); } 2. Код для вывода картинки: PHP: $q = $db->query("SELECT item_photo FROM menu_photos WHERE item_parent_id = 1"); $r = mysql_result($q, 0, "item_photo"); header("Content-type: image/bmp"); echo $r; Проблема в коде для вывода. 1. Если не добавить заголовок Content-type, то выводятся бинарные символы. 2. Если добавить вот это: header("Content-type: image/*") то предлагается открыть файл *.php 3. Если добавить заголовок header("Content-type: image/bmp") (bmp - формат загружаемой картинки)- то вижу сообщение что "файл ... не может быть показан так как содержит ошибки. Как всё-таки правильно будет осуществлять загрузку и выгрузку изображений из БД? [/php]
1. Хранить картинки в базе вообще плохая идея. 2. Использовать формат bmp - идея очень плохая. Есть сжатие без потери качества: PNG. PHP: <?php $type = substr($_FILES['pht']['type'], 0, 5); if ($type !== "image") die(); ?> Здесь $_FILES['pht']['type'] чему равен? Точно image/bmp?
AlexGousev Я всё знаю про эти "плохие идеи" Во-первых хранить картинки в базе - не моя прихоть. Это раз. Во-вторых формат bmp я использую только для тестовых целей. В реальности будет либо jpg либо gif. $_FILES['pht']['type'] стопроцентно равно "image/bmp".
PHP: <?php $q = $db->query("SELECT item_photo FROM menu_photos WHERE item_parent_id = 1"); $r = mysql_result($q, 0, "item_photo"); file_put_contents('image.bmp', $r); и посмотри потом в любом граф. редакторе.
Странно... работает... но это получается, что я вывожу уже совершенно конкретное изображение. А почему же не удаётся вывести из базы? В смысле не таким образом, а конкретно послать на устройство вывода то, что имеется в базе...
Смысл хранения картинок в базе - чтобы не создавать дополнительные изображения на диске. Если я буду каждый раз делать таким образом, во-первых увеличится нагрузка на сервер, во-вторых весь смысл теряется.
Есть ссылка, по которой можно видеть работу скрипта? Только уберите эту строчку: PHP: header("Content-type: image/bmp");
Что именно?! Вот это надо обосновывать, как и любую бессмысленную кракозябру. Что откуда и куда СОЗДАВАТЬ? "нагрузка на сервер" - это не заклинание и повод, а вполне осмысленная вещь, при чем тут это?
Хорошо. Я храню изображения в базе для того, чтобы не создавать лишние файлы на диске. Да и, собственно, не я это делаю, не моя это прихоть. Это раз. Два - раз изображения хранятся в базе, то и выводиться они на устройство вывода должны из базы данных, а не с дискового массива. Это логично, потому что изначально не предусмотрено хранение изображений на диске. По крайней мере в рамках этого проекта. По поводу нагрузки на сервер. Представьте, что ежедневно пользователь закачивает в базу около сотни картинок. Потом ему их надо просмотреть. Да, ещё кроме этого администратора, который этим занимается, существуют пользователи. Причём их достаточно много. Естественно, что хостинг виртуальный, на котором выделяеюся очень лимитированные процессорные ресурсы. Если 100 человек в день будут грузить туда-сюда 100 картинок - с базы на диск и обратно - мало не покажется ни хостеру ни, соответственно, пользователям. А по поводу "бессмысленной кракозябры" - я здесь ожидаю реальной помощи. Если кто-то здесь слишком меркантильный и/или ему нечего сказать, лучше, всё-таки помолчать, а не просто так набивать посты в форуме. Обозвать бредом может любой, а реально помочь - очень немногие. Сомневаюсь, что вы относитесь к их числу.
В том, что вместо изображения выводится либо бинарный текст либо вот это: Изображение “http://*.../photo_manager.php” не может быть показано, так как содержит ошибки. :lol: :lol: :lol:
mark2008 так картинка бъется рпи записи? тебе ж сказали что надо сохранить на диск и проверить где там что бъется