|
|
|
| Привет!
Код из темы http://softtime.ru/forum/read.php?id_forum=3&id_theme=40515
Написал Trianon.
<?php
// здесь повторяем запрос чтобы выбрать такие же данные
include 'config.inc.php'; // соединяемся с БД
$query = "SELECT photo FROM product
WHERE id_product=".intval(@$_GET['num']);
$res=mysql_query($query);
@$image=mysql_result($res, 0, 0);
$pref6 = substr($image, 0, 6);
$pref4 = substr($pref6, 0, 4);
$pref3 = substr($pref4, 0, 3);
if($pref6 == "%PNG\r\n") $type = 'png';
else if($pref4 == "GIF8") $type = 'gif';
else if($pref3 == "\xFF\xD8\xFF") $type = 'jpeg';
if(isset($type))
{
header("Content-type: image/$type");
echo $image;
}
else
{
header("Content-type: image/gif");
fpassthru(fopen("unknown-image-type.gif", 'rb'));
}
?>
|
Касательно этого возникли следующие вопросы:
1) "@$image=mysql_result($res, 0, 0);"
Зачем второй ноль?
2) if($pref6 == "%PNG\r\n") $type = 'png';
Для чего нужно "\r\n" ?
3) else if($pref3 == "\xFF\xD8\xFF")
Часть с "\xFF\xD8\xFF" не понятна
С gif к счастью все ясно :)
Боюсь даже спрашивать зачем каждый раз новый "pref"
4) Ну и конечно header. Какова его функция? Куда он это отсылает?
...при этом нужно проследить чтобы первым байтом файла был символ <... это как? | |
|
|
|
|
|
|
|
для: Furst
(27.07.2007 в 15:23)
| | >1) "@$image=mysql_result($res, 0, 0);"
>Зачем второй ноль?
Здесь излишне, но вообще, если запрос возвращает более одного столбца, следует указывать его номер (нумерация с нуля).
>4) Ну и конечно header. Какова его функция? Куда он это отсылает?
HTTP-заголовок Content-type: image/gif сообщает браузеру, что сейчас пойдёт картинка, а не текст или бинарные данные. | |
|
|
|
|
|
|
|
для: cheops
(28.07.2007 в 12:09)
| | cheops, спасибо.
2 Frust:
Почему несколько префиксов?
$pref3 - первые три байта файла
$pref6 - первые шесть байт. и т.д.
Потому что у каждого типа графического файла - своя длина постоянной части сигнатуры, а сравнивать нужно только её. Следующие символы могут меняться. Если кто-нибудь приведет более локаничный код - я только обрадуюсь. | |
|
|
|
|
|
|
|
для: Trianon
(28.07.2007 в 15:57)
| | Спасибо! Разобрался :) | |
|
|
|