Доброго времени суток. Возникла следующая проблема: код вида <? $image = ImageCreateFromJpeg("007.jpg"); ImageJpeg($image); ImageDestroy($image); ?> выводит вместо рисунка набор беспорядочных символов, если вставить его в html-страницу, если же использовать в файле php, то выводит рисунок в Эксплорер, а в Опере отображается тот же набор символов. Что здесь не так?
Пустая строка в коде, как раз от того, что вы предложили. С нею php ещё и ругается, пишет что-то вроде того, что заголовок передавать не требуется.
Alexer - Пишет что "вы неможете пердать заголовки так как уже началась выдача тела документа" скорее так пустая строка в каком коде ? стоит делится ошибками, а не пытаться их придумать ..
Это начало белиберды, которую выдаёт Эксплорер вместо рисунка, при выполнении кода: <html> <head><title>11111</title></head> <body> <? include "index3/php"; ?> </body> </html> Файл index3.php: <? $image = ImageCreateFromJpeg('007.jpg'); Header('Content-type image/jpeg'); ImageJpeg($image, 'test.jpg'); ImageDestroy($image); ?> При загрузке index3.php непосредственно в Эксплорер отображается картинка, в Оперу - крякозябры. В случае html - крякозябры и там и там. При удалении из файла index3.php строки Header('Content-type image/jpeg'); предупреждение пропадает, но картинка не отображается.
Alexer - я был уверен первое очень важно прочесть и осознать http://www.phpfaq.ru/na_tanke второе .. неужели ты думаешь чт браузеры такие умные и будут за тебя отделять картинку от хтмль ??? третье .. как уже сказал .. ты сначало распечатал теги а потом пытаешься передать заголовок .. неудивительно что у тебя ошибка! заголовок должен идти до ЛЮБОЙ выдачи документа в браузер index.php PHP: <html> <head><title>11111</title></head> <body> <img src="index3.php"> </body> </html> Файл index3.php: PHP: <?php $image = ImageCreateFromJpeg('007.jpg'); Header('Content-type image/jpeg'); ImageJpeg($image); <- здесь тоже обрати внимание .. ты выдавал картинку в фаил, а не поток - а как она в браузер то попадет подумал ? ImageDestroy($image); ?>
Практически всё, что там написано, я знаю. Не думал, но открывать картинку побайтно и отображать каждый байт в виде символа - это слишком, притом, что функция ImageJpeg должна выводить картинку в браузер, а не что-либо ещё. А вот тут непонятно. Можно поподробней? То есть получается, что код, использующий графические функции нельзя встраивать в html? Как не в поток, если бы я её выдавал в файл, то было бы примерно так: ImageJpeg($image, 'test.jpg); Это привело бы к появлению нового файла и пустому браузеру. У меня же в Эксплорере картинка ВЫВОДИТСЯ из файла index3.php, а в Опере появляются крякозябры.
Alexer если знаешь то откуда вопросы ? вообщем картинка передается отдельно от хтмль ... хтмль - только указывает где она должна вывестись ! ( ты гденибудь видел внутри хтмль[разметки] тело картинки ??? врядли .. ) так и здесь .. сначало ты передаешь браузеру ХТМЛЬ, потом картинку .. это два разных запроса! при этом пхп как был так и остался на сервере .. и браузер о пхп вообще ничего не знает ...
Luge - блин так и знал что ктонить выпендрится!!! .... а теперь обясни через это "узкое место" как и где работает пхп код
ещё с утра работала на сервере, но, судя по количеству желающих, скоро будет работать везде… Тут у человека вопрос не в том, где, а в том, что прочитав про HTML: <!-- много хтмля --> <? echo 'Строчко' ?> <!-- опять много хтмля --> он считает это нормальным поведением для любой функции. Alexer, если бы это был первый вывод на странице (или вообще единственный), то всё было бы именно так, как Вы и написали, но тут появляются некоторые особенности PHP: <?php header('Content-type: image/png'); // устанавливаем тип документа - "изображение в формате PNG". ?> без заголовка Content-type браузер и выведет а сам заголовок должен быть отправлен ДО любого другого вывода в браузер http://php.net/header PHP: <html> <?php /* This will give an error. Note the output * above, which is before the header() call */ header('Location: [url=http://www.example.com/']http://www.example.com/'[/url]); ?> По-русски и понятно про заголовки на http://phpfaq.ru/headers Вот и получается, что выход из положения такой, как тебе уже подсказал nimistar index.php PHP: <html> <head><title>11111</title></head> <body> <img src="index3.php"> </body> </html> Файл index3.php: PHP: <?php $image = ImageCreateFromJpeg('007.jpg'); Header('Content-type image/jpeg'); ImageJpeg($image); ImageDestroy($image); ?>
Да, именно на это я и расчитывал. У меня нет файла image.php. Я думал, что он это определит по данным, передаваемым функцией ImageJpeg. Поймите, что браузер показывает крякозябры вместо рисунка, независимо от наличия/отсутствия строки Content-type. Проблема как раз в том, что это же он выводит и с указанием Content-type. index.php PHP: <html> <head><title>11111</title></head> <body> <img src="index3.php"> </body> </html> Файл index3.php: PHP: <?php $image = ImageCreateFromJpeg('007.jpg'); Header('Content-type image/jpeg'); ImageJpeg($image); ImageDestroy($image); ?> [/quote] Такая вещь прекрасно работает, но что получится, если я буду выводить таблицу с кучей рисунков таким образом? Не окажутся ли у меня крякозябры вместо рисунков?