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

Форум PHP

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

 

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

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

тема: Как сделать чтобы session_start() и header("Content-type: image/jpeg") работали вместе?
 
 автор: KIM   (14.06.2008 в 10:20)   письмо автору
 
 

Мне надо вывести с помощью скрипта изображение. Всё работает нормально, но когда использую сессию появляется проблема.
Код:

<?php
session_start
();
header("Content-type: image/jpeg");
$file fopen('image.jpg',"r");
fpassthru($file);
?>

Без session_start(); всё работает, а с ним браузер распознает рисунок как bmp, то есть
header не работает... Но тут сессия для других дел мне необходима! Как быть?

   
 
 автор: t3ma   (14.06.2008 в 12:21)   письмо автору
 
   для: KIM   (14.06.2008 в 10:20)
 

Может быть так попробывать ?


<?php 
header
("Content-type: image/jpeg"); 

session_start(); 

$file fopen('image.jpg',"r"); 
fpassthru($file); 
?>

   
 
 автор: KIM   (14.06.2008 в 16:43)   письмо автору
 
   для: t3ma   (14.06.2008 в 12:21)
 

Так тоже не работает, только без старта сессии, а без неё смысл работы пропадает...

   
 
 автор: sim5   (14.06.2008 в 17:10)   письмо автору
 
   для: KIM   (14.06.2008 в 16:43)
 

А в чем выражается "не работает"?

   
 
 автор: KIM   (14.06.2008 в 17:22)   письмо автору
 
   для: sim5   (14.06.2008 в 17:10)
 

Когда нет функции session_start(), изображение выводится как jpeg, а когда эта функция имеется, изображение выводится как bmp. Я рад бы оставить bmp, но размер файла ны выходе многократно увеличивается!

   
 
 автор: sim5   (14.06.2008 в 17:35)   письмо автору
 
   для: KIM   (14.06.2008 в 17:22)
 

Вы говорите о сохранении изображения пользователем?

   
 
 автор: KIM   (14.06.2008 в 17:51)   письмо автору
 
   для: sim5   (14.06.2008 в 17:35)
 

Да...

   
 
 автор: BinLaden   (14.06.2008 в 18:09)   письмо автору
 
   для: KIM   (14.06.2008 в 17:51)
 

Ну разве что проделки чёрта виноваты. Не может session_start() тут как-то повлиять подобным образом.

   
 
 автор: KIM   (14.06.2008 в 18:18)   письмо автору
 
   для: BinLaden   (14.06.2008 в 18:09)
 

Ну я сам озадачен. В другом форуме говорят, мол рисунок не может сессией обладать... Но ка к быть то...

   
 
 автор: BinLaden   (14.06.2008 в 18:19)   письмо автору
 
   для: KIM   (14.06.2008 в 18:18)
 

Можете попробовать помолиться тому Богу, в которого верите.

   
 
 автор: sim5   (14.06.2008 в 18:25)   письмо автору
 
   для: BinLaden   (14.06.2008 в 18:09)
 

Да, непосредственно она не устанавливает тип изображения, но IE в этом случае не понимает заголовок, и будет сохранять изображение как BMP файл.

   
 
 автор: BinLaden   (14.06.2008 в 18:27)   письмо автору
 
   для: sim5   (14.06.2008 в 18:25)
 

> IE в этом случае не понимает заголовок

С какой стати от установки cookies, т.е. фактически заголовка "Set-Cookie" IE перестаёт понимать другие заголовки (Content-type)?

   
 
 автор: sim5   (14.06.2008 в 18:57)   письмо автору
 
   для: BinLaden   (14.06.2008 в 18:27)
 

Вот этого не знаю, но в IE есть такой глюк небольшой, проверьте. Тоже самое, например, можно отдать через скрипт JS сценарий, не так:
<script type="text/javascript" src="mame.js"></script>
а так:
<script type="text/javascript" src="mame.php"></script>
В кеше в этом случе, сценарий будет сохранен под расширением php, все работает, но не всегда гладко, бывают косяки в ослике, почему, я не знаю.

   
 
 автор: BinLaden   (14.06.2008 в 19:27)   письмо автору
 
   для: sim5   (14.06.2008 в 18:57)
 

По-любому, сама картинка с сервера и так JPEG будет скачиваться, так что можно не беспокоиться. Это скорее автору говорю...

   
 
 автор: sim5   (14.06.2008 в 19:37)   письмо автору
 
   для: BinLaden   (14.06.2008 в 19:27)
 

С сервера да - JPG, а вот сохранять будет отталкивась от DIB уже, насколько я понимаю.

   
 
 автор: sim5   (14.06.2008 в 18:20)   письмо автору
 
   для: KIM   (14.06.2008 в 17:51)
 

Тогда вынесите код, который отдает изображения в браузер в отдельный скрипт, и обращайтесь к нему.

   
 
 автор: KIM   (14.06.2008 в 18:31)   письмо автору
 
   для: sim5   (14.06.2008 в 18:20)
 

Не понял, как это сотворить? Я пытаюсь сделать так (в упрощённом виде, без обработчика ошибок):

Страница index.php:
<?php
session_start
();
$_SESSION['image'] = 'risunok';
?>
<img src="image.php">


Страница image.php
<?php
session_start
();
header("Content-type: image/jpeg");
$file fopen($_SESSION['image'].'.jpg',"r");
fpassthru($file);
?>


На сервере файл jpg который весит примерно 12 КБ
У пользователя получается bmp размером более 40КБ

   
 
 автор: sim5   (14.06.2008 в 18:47)   письмо автору
 
   для: KIM   (14.06.2008 в 18:31)
 

А что такая необходимость через сессию? Что так нельзя?:

<?php 
session_start
(); 
//$_SESSION['image'] = 'risunok'; 
?> 
<img src="image.php?im=risunok">


<?php 
header
("Content-type: image/jpeg"); 
$file fopen($_GET['im'].'.jpg',"r"); 
fpassthru($file); 
?>

   
 
 автор: BinLaden   (14.06.2008 в 18:52)   письмо автору
 
   для: sim5   (14.06.2008 в 18:47)
 

Правда уже Ваш код, sim5, позволяет пользователю самому подправить значение.

   
 
 автор: sim5   (14.06.2008 в 18:59)   письмо автору
 
   для: BinLaden   (14.06.2008 в 18:52)
 

В смысле сменить имя картинки? Так тогда надо вообще запретить атрибут src ибо можно везде подправлять, или вы о чем?

   
 
 автор: BinLaden   (14.06.2008 в 19:14)   письмо автору
 
   для: sim5   (14.06.2008 в 18:59)
 

Можно подставить в качестве параметра im что-то вроде "image.php%00" и посмотреть PHP-код файла, т.е. это значение тут пользователь сам подставляет.

В $_SESSION же значение задаёт сервер и клиент его не может изменить.

То есть такая замена $_SESSION на $_GET, скажем так, не эквивалентна.

   
 
 автор: sim5   (14.06.2008 в 19:22)   письмо автору
 
   для: BinLaden   (14.06.2008 в 19:14)
 

И что? Я не знаю, для чего и зачем так автор выводит, но никто вроде бы и не запрещает проверять наличие запрашиваемого файла.

PS. Да и вообще во всем этом нет здравого смысла. Если это ради того чтобы скрыть путь к изображениям, чтобы не скачивали напрямую, но при этом беспокоиться о расширении при сохранении...

   
 
 автор: KIM   (14.06.2008 в 19:58)   письмо автору
 
   для: KIM   (14.06.2008 в 10:20)
 

Точную причину и лекарство никто не знает? Передача данных через GET небезопасна

   
 
 автор: sim5   (14.06.2008 в 20:07)   письмо автору
 
   для: KIM   (14.06.2008 в 19:58)
 

Хорошо, а что (или кто) определяет это: $_SESSION['image'] = 'risunok';, и для чего ваш механизм предназначен?

   
 
 автор: Trianon   (14.06.2008 в 21:19)   письмо автору
 
   для: KIM   (14.06.2008 в 19:58)
 

index.php
<?php
session_start
();
$_SESSION['image'] = 'risunok';
?>
<img src="image.php?x=x.jpg">


image.php
<?php
session_start
();
header("Content-type: image/jpeg");
$file fopen($_SESSION['image'].'.jpg',"r");
fpassthru($file);
?> 

   
 
 автор: sim5   (15.06.2008 в 04:24)   письмо автору
 
   для: Trianon   (14.06.2008 в 21:19)
 

Ослик будет предлагать сохранение в BMP.

   
 
 автор: Trianon   (15.06.2008 в 13:30)   письмо автору
 
   для: sim5   (15.06.2008 в 04:24)
 

Ну если делать по уму, то нужно поле content-disposition добавить с именем файла, и в поле content-type тоже имя проставить.

   
 
 автор: sim5   (15.06.2008 в 14:03)   письмо автору
 
   для: Trianon   (15.06.2008 в 13:30)
 

Нет, не покажет ослик тип файла в свойствах.

   
 
 автор: mihdan   (16.06.2008 в 15:36)   письмо автору
 
   для: KIM   (14.06.2008 в 10:20)
 

<?
session_start
();
session_cache_limiter('private_no_expire');
// session_cache_limiter('none');
?>


или

http://kpumuk.info/php/ie-save-pictures-bmp/lang/ru/

   
 
 автор: sim5   (16.06.2008 в 16:12)   письмо автору
 
   для: mihdan   (16.06.2008 в 15:36)
 

Понимает, что можно в JPG сохранить, а в свойствах файла, тип так и не понимает.

   
 
 автор: mihdan   (16.06.2008 в 16:28)   письмо автору
 
   для: sim5   (16.06.2008 в 16:12)
 

Всегда говорил, что ИЕ недобраузер, но чтоб до такой степени. Ладно поэкспериментируем

   
 
 автор: sim5   (16.06.2008 в 16:35)   письмо автору
 
   для: mihdan   (16.06.2008 в 16:28)
 

Ну зачем так сразу?) Бог с ними с картинками, меня больше интересует вывод JS, например, посредством РНР, поможет ли в этом случае. Хотя немного не понимаю логики связи с кешированием - JS там и место, в кеше. С заголовками понятно, но JS можно и без заголовка передать и будет работать, но иногда начинаются сбои. Вот с чем это увязать, до меня не доходит.

   
 
 автор: mihdan   (16.06.2008 в 16:48)   письмо автору
 
   для: sim5   (16.06.2008 в 16:35)
 

Походу Р3Р. Где-то я видел патч-заголовок для ИЕ, вот вспомнить бы где, и прекрасно все работало

   
 
 автор: mihdan   (16.06.2008 в 16:54)   письмо автору
 
   для: sim5   (16.06.2008 в 16:35)
 


<?
session_start
();
header('P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"');
?>


http://forum.dklab.ru/php/heap/Cooks.html?sid=03d4059a2f582d470b36c0721875e54a
http://doc.dubs.odessa.net/phpdoc/function.setcookie.php (комменты)

   
Rambler's Top100
вверх

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