Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: "картинка в БД (ещё раз)" ещё раз
 
 автор: Furst   (27.07.2007 в 15:23)   письмо автору
 
 

Привет!
Код из темы 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($res00); 
 
$pref6 substr($image06); 
 
$pref4 substr($pref604); 
 
$pref3 substr($pref403); 
 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. Какова его функция? Куда он это отсылает?

...при этом нужно проследить чтобы первым байтом файла был символ <... это как?

   
 
 автор: cheops   (28.07.2007 в 12:09)   письмо автору
 
   для: Furst   (27.07.2007 в 15:23)
 

>1) "@$image=mysql_result($res, 0, 0);"
>Зачем второй ноль?
Здесь излишне, но вообще, если запрос возвращает более одного столбца, следует указывать его номер (нумерация с нуля).

>4) Ну и конечно header. Какова его функция? Куда он это отсылает?
HTTP-заголовок Content-type: image/gif сообщает браузеру, что сейчас пойдёт картинка, а не текст или бинарные данные.

   
 
 автор: Trianon   (28.07.2007 в 15:57)   письмо автору
 
   для: cheops   (28.07.2007 в 12:09)
 

cheops, спасибо.


2 Frust:


Почему несколько префиксов?

$pref3 - первые три байта файла
$pref6 - первые шесть байт. и т.д.

Потому что у каждого типа графического файла - своя длина постоянной части сигнатуры, а сравнивать нужно только её. Следующие символы могут меняться. Если кто-нибудь приведет более локаничный код - я только обрадуюсь.

   
 
 автор: Furst   (28.07.2007 в 21:09)   письмо автору
 
   для: Trianon   (28.07.2007 в 15:57)
 

Спасибо! Разобрался :)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования