X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

2 страниц V   1 2 >
Открыть тему
Тема закрыта
> fread вместо картинки выдаёт бинарный код
happyhand
happyhand
Topic Starter сообщение 15.9.2011, 11:59; Ответить: happyhand
Сообщение #1


Пытаюсь открыть картинку:

[PHP]
if (move_uploaded_file($HTTP_POST_FILES['attachment']['tmp_name'],$path))
{
$handle = @fopen($path,'rb');
$filesize = @filesize($path);
$filestuff = @fread($handle, $filesize);
@fclose($handle);
@unlink($path);
}
echo $filestuff; die();

[/PHP]

но вместо картинки получаю ее бинарный код.
Может быть дело в кодировке скрипта, я ее поменял на utf-8 c iso-8859-1.
Закачал этот скрипт на другой хост, кодировку оставил как есть, все нормально, отображается картинка, а здесь не хочет.
Не подскажете, как решить проблему, не меняя кодировку скрипта, если дело, конечно же в ней?
[COLOR=#0000ff][/COLOR]
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Apay
Apay
сообщение 15.9.2011, 13:36; Ответить: Apay
Сообщение #2


надо послать заголовки в зависимости от формата файла, например для png:
[PHP]header( 'Content-type: image/png' );[/PHP]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
happyhand
happyhand
Topic Starter сообщение 15.9.2011, 13:45; Ответить: happyhand
Сообщение #3


Вот так:

[PHP]
$handle = @fopen($path,'rb');
$filesize = @filesize($path);
$filestuff = @fread($handle, $filesize);
@fclose($handle);
@unlink($path);
header( 'Content-type: image/png' );
echo $filestuff;
[/PHP]
не работает.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
r3ntg3n
r3ntg3n
сообщение 15.9.2011, 13:49; Ответить: r3ntg3n
Сообщение #4


А Вы уверены, что у Вас изображение формата png? Используйте определение формата изображения, а уже потом отдавайте браузеру соответствующий заголовок.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Apay
Apay
сообщение 15.9.2011, 14:16; Ответить: Apay
Сообщение #5


я же написал:
(Apay @ 15.9.2011, 16:36) *
в зависимости от формата файла

в общем случае код такой (переделать по необходимости)
[PHP]$attr = @getimagesize( $path );
switch( @$attr[2] ){
case IMAGETYPE_GIF: header( 'Content-type: image/gif' ); break;
case IMAGETYPE_PNG: header( 'Content-type: image/png' ); break;
case IMAGETYPE_JPEG: header( 'Content-type: image/jpeg' ); break;
default: die(); // not an image;
}
$handle = fopen( $path, 'r' );
fpassthru( $handle );
fclose( $handle );
[/PHP]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZhukV
ZhukV
сообщение 16.9.2011, 10:48; Ответить: ZhukV
Сообщение #6


Файл нужно открывать в простом режиме чтения, а не в бинарном. Точно не уверен, но мне кажеться, что там есть какая-то разница ))
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Apay
Apay
сообщение 16.9.2011, 11:50; Ответить: Apay
Сообщение #7


(ZhukV @ 16.9.2011, 13:48) *
Файл нужно открывать в простом режиме чтения, а не в бинарном.
именно в бинарном, можно в fopen указать 'rb', но у меня с 'r' проблем не было и под виндами, и под линухом, и под фряхой.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Arks
Arks
сообщение 17.9.2011, 22:40; Ответить: Arks
Сообщение #8


Дело исключительно в заголовке.

Apay, а
fpassthru( $handle ); - это жёстко :goodpost:

Кстати насколько мне изместно и .jpg и .jpeg после geimagesize приобретают во втором ключе jpeg. Возможно с этим проблема?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Apay
Apay
сообщение 17.9.2011, 23:10; Ответить: Apay
Сообщение #9


(Arks @ 18.9.2011, 01:40) *
fpassthru( $handle ); - это жёстко
есть альтернатива? загонять все в переенную потом ее выводить имхо очень нерационально.

(Arks @ 18.9.2011, 01:40) *
Кстати насколько мне изместно и .jpg и .jpeg после geimagesize приобретают во втором ключе jpeg
.jpg и .jpeg различаются только расширением, формат файла один и тот же, поэтому если я выдам заголовок image/jpeg а файл формата jpeg назову file.non-jpeg - он все равно отобразится нормально.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Arks
Arks
сообщение 18.9.2011, 22:15; Ответить: Arks
Сообщение #10


Apay, вариантов много, в переменную в буфер.. мне кажется неправильным сразу загонять неизвестный контент в вывод. Лично я всегда произвожу обработку на imagemagick/GD заодно подгоняя размеры. По поводу jpg - да это я просто заметил, когда не знал пришлось поломать голову как восстанавливать исходное название когда расширение получается одинаковым. Это и к вопросу об imagesize. Напишите file.non-jpeg - непременно где-то что-то неправильно сработает. Например пользователь захочет сохранить и открыть файл. В общем это конечно все нюансы, я согласен. Но лучше сразу делать хорошо и правильно.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
2 страниц V   1 2 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Можно ли в старый SEO текст вместо старого домена поставить новый?
3 Tutich 1209 22.3.2024, 14:47
автор: Tutich
Горячая тема (нет новых ответов) Тема имеет прикрепленные файлыКто и зачем покупает картинки обезьян по $200 тысяч?
NFT
167 metvekot 27407 6.3.2024, 21:58
автор: Boymaster
Открытая тема (нет новых ответов) Тема имеет прикрепленные файлыВыравнивание картинки по центру между текстом
10 NikN 2637 6.1.2021, 23:24
автор: buypushplatform
Открытая тема (нет новых ответов) Почистить код на сайте
1 Timka 1104 2.1.2021, 1:13
автор: 0pium
Открытая тема (нет новых ответов) Тема имеет прикрепленные файлыВы мне код, я вам как - делать не надо.
0 fedornabilkin 958 18.9.2020, 18:59
автор: fedornabilkin


 



RSS Текстовая версия Сейчас: 18.4.2024, 13:58
Дизайн