Печать динамической сгенерированной картинки, $_POST и IE

greg52

Новичок
Печать динамической сгенерированной картинки, $_POST и IE

Здравствуйте!

Столкнулся с одной особенностью (привожу контрольный пример):
есть форма:
PHP:
<html><body>
<form action="forie.php" method="post" target="_blank" >  
Введите текст: <input type="text" value="TEST" name="text">  <input type="submit" value="Отправить">  
</form>    
</body></html>
Есть файл forie.php:
PHP:
<?php
// Set the content-type
header("Content-type: image/png");

// Create the image
$im = imagecreatetruecolor(400, 30);

// Create some colors
$white = imagecolorallocate($im, 255, 255, 255);
$yellow = imagecolorallocate($im, 255, 255, 100);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 399, 29, $yellow);

// The text to draw
$text = $_POST['text'];
// Replace path by your own font path
//echo($text);
$document_root = $_SERVER['DOCUMENT_ROOT'];
$font = $document_root."/arial.ttf";

// Add some shadow to the text
imagettftext($im, 20, 0, 11, 21, $grey, $font, $text);

// Add the text
imagettftext($im, 20, 0, 10, 20, $black, $font, $text);

// Using imagepng() results in clearer text compared with imagejpeg()
imagepng($im);
imagedestroy($im);
?>
.

Все работает. При отправке формы создается картинка с надписью.
Но теперь когда в Internet Explorer выбираем просмотр картинки, она показывается без надписи. Также она и печатается
без надписи.
А Опере все печать и просмотр нормальные.
Т.е. проблема только в IE.
Пробовал дома PHP Version 5.2.5, apache 2.2.8, Win XP,
а также на хостинге (*nix). Ситуация такая же.
Похожие темы уже обсуждались, но без указания причины:
Проблема с сессиями в новом окне IE,
Проблема печати динамической страницы в IE

Теперь почему так происходит (запросы смотрел HTTP Debugger pro):
когда выбираешь "файл"-"просмотр печати" или "файл"-"печать" IE делает еще один запрос (!!!), не POST:

GET /for_phpclub/forie.php HTTP/1.1
Accept: */*
Accept-Language: ru
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; InfoPath.1; .NET CLR 2.0.50727)
Host: localhost
Connection: Keep-Alive


соответственно, нет никакго $_POST, и печатается картинка без надписи. Т.е., например,
PHP:
isset($_POST['text'])
даст false , хотя при первом выводе было true. Как это красиво обойти?
 

berkut

Новичок
передавать форму гетом? или хотя-бы только нужное поле
 

dimagolov

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

-~{}~ 15.05.08 15:35:

not in time :(
 

greg52

Новичок
Рад бы гет-ом, но объем данных большой, это форма с 20-ю полями.
 

dr-sm

Новичок
а если обработать пост, сгенерить картинку, а потом отдать редирект на нее.
 

greg52

Новичок
Автор оригинала: dr-sm
а если обработать пост, сгенерить картинку, а потом отдать редирект на нее.
Что Вы имеете в виду? Сохранить её как файл, а потом
PHP:
<?  
$URL="http://phpclub.ru";  header ("Location: $URL");  
?>
?
Хорошо, ну а как её потом автоматически удалить? А если всегда под одним и тем же именем, то как быть с несколькими пользователями одновременно?
 

Alkinoy

Начинающий
сохранить данные формы в сессии и редирект на другую страницу гетом. там вынуть данные из сессии и построить картинку.
 

bgm

&nbsp;
greg52
PHP:
<form action="forie.php?frm=FORM_UNIQUE_ID" method="post" target="_blank" >
P.S. Вот такой вот намёк :)
 

dr-sm

Новичок
Автор оригинала: greg52
Что Вы имеете в виду? Сохранить её как файл, а потом
PHP:
<?  
$URL="http://phpclub.ru";  header ("Location: $URL");  
?>
?
Хорошо, ну а как её потом автоматически удалить? А если всегда под одним и тем же именем, то как быть с несколькими пользователями одновременно?
имхо, оптимально генерить уникальное имя и прямо на него делать редирект, на статику
header ("Location: http://site.com/static/generated/deadbeef001.png");
сносить их потом, кроном:
cd /path/to/images; find -cmin +666 | xargs rm

через сессию таскать ниче не надо, тогда будет по ф5 все генерицо поновой и грузить сервак.
 

greg52

Новичок
Все ответившим большое спасибо, сделал следующим образом:

1. Вместо картинки, которая сразу генерируется, сначала генерируется HTML;
2. При генерации этого HTML в сесии сохраняются данные POST;
3. В этом HTML есть тег IMG, который генериуется PHP-скриптом, а уж этот скрипт формирует картинку по запомненным в сесии данным.
 
Сверху