Отдача картинки

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Аватара пользователя
xoma
Сообщения: 641
Зарегистрирован: 2009.04.02, 15:24
Откуда: Ногинск
Контактная информация:

Отдача картинки

Сообщение xoma »

Доброго и не задымленного всем дня!

Что-то поломалась у меня отдача картинок.

Есть вот такой код отправки фотографии пользователю:

Код: Выделить всё

Yii::app()->request->sendFile(basename($foto->file),file_get_contents($foto->file));
 
Файл скачивается нормально, размер полученного фала тоже нормальный.

Однако при попытке открыть его "просмоторщиком" изображений (дефолтный в Убунту) получаю вот что:

"Произошла ошибка интерпретации файла изображения формата JPEG (Not a JPEG file: starts with 0x0d 0x0a)".

Если сохранить этот же файл средствами браузера ("сохранить изображение") - файл открывается нормально.

md5sum обоих файлов совпадает, однако файл, полученный через sendFile не открывается ни в одном редакторе/просмоторщике.

Может кто сталкивался?

Yii из SVN, Ubuntu 10.4, Apache

Аватара пользователя
timlar
Сообщения: 1382
Зарегистрирован: 2009.09.19, 17:49
Откуда: Украина, Днепропетровск
Контактная информация:

Re: Отдача картинки

Сообщение timlar »

Может это проблема не в файле, а что-то с вьювером? Если можно, прикрепи файл к посту, попробую у себя открыть. У меня Ubuntu 10.04.
Twitter: @timlar_ua

Аватара пользователя
xoma
Сообщения: 641
Зарегистрирован: 2009.04.02, 15:24
Откуда: Ногинск
Контактная информация:

Re: Отдача картинки

Сообщение xoma »

При попытке приложить файл - движок этого форума говорит "Не удалось определить размеры изображения." =(

Аватара пользователя
timlar
Сообщения: 1382
Зарегистрирован: 2009.09.19, 17:49
Откуда: Украина, Днепропетровск
Контактная информация:

Re: Отдача картинки

Сообщение timlar »

Дык в архивчик его )))
Twitter: @timlar_ua

Аватара пользователя
xoma
Сообщения: 641
Зарегистрирован: 2009.04.02, 15:24
Откуда: Ногинск
Контактная информация:

Re: Отдача картинки

Сообщение xoma »

Опередил! Сорри, туплю!

Во вложении архив - там два файла, оба не открываются
Вложения
Загрузки.rar
(26.68 КБ) 61 скачивание

Аватара пользователя
timlar
Сообщения: 1382
Зарегистрирован: 2009.09.19, 17:49
Откуда: Украина, Днепропетровск
Контактная информация:

Re: Отдача картинки

Сообщение timlar »

По идее, если забирать изображение с помощью file_get_contents(), то оно отображаться не должно, т.к. функция file_get_contents() возвращает содержимое файла в виде строки. Как вариант, можно обработать с помощью функции imagecreatefromstring() библиотеки GD, а дальше отдать на скачивание. Еще как вариант, попробуй читать файл с помощью fread().

Код: Выделить всё

header ("Content-type: image/jpg");
$im = imagecreatefromstring(file_get_contents($file));
imagejpeg($im); 
Последний раз редактировалось timlar 2010.08.06, 11:17, всего редактировалось 2 раза.
Twitter: @timlar_ua

Аватара пользователя
timlar
Сообщения: 1382
Зарегистрирован: 2009.09.19, 17:49
Откуда: Украина, Днепропетровск
Контактная информация:

Re: Отдача картинки

Сообщение timlar »

Кстати, попробуй еще явно указывать тип файла в заголовке перед отдачей:

Код: Выделить всё

header('Content-type: image/jpeg');
echo file_get_contents('/img/folder/test.jpg'); 
Twitter: @timlar_ua

Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Отдача картинки

Сообщение slavcodev »

и так тоже попробуй

Код: Выделить всё

Yii::app()->request->sendFile(basename($foto->file),file_get_contents($foto->file),'image/jpeg'); 
Жду Yii 3!

Аватара пользователя
xoma
Сообщения: 641
Зарегистрирован: 2009.04.02, 15:24
Откуда: Ногинск
Контактная информация:

Re: Отдача картинки

Сообщение xoma »

mc-bear писал(а):и так тоже попробуй

Код: Выделить всё

Yii::app()->request->sendFile(basename($foto->file),file_get_contents($foto->file),'image/jpeg'); 
Не помогает...

Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Отдача картинки

Сообщение slavcodev »

кто-то добавляет в файл лишний перенос строки в начале, может из-за этого
file_get_contents() is the preferred way to read the contents of a file into a string. It will use memory mapping techniques if supported by your OS to enhance performance.
а может и нет
попробуй

Код: Выделить всё

Yii::app()->request->sendFile(basename($foto->file),implode('',file($foto->file))); 
Жду Yii 3!

Аватара пользователя
xoma
Сообщения: 641
Зарегистрирован: 2009.04.02, 15:24
Откуда: Ногинск
Контактная информация:

Re: Отдача картинки

Сообщение xoma »

mc-bear писал(а):кто-то добавляет в файл лишний перенос строки в начале, может из-за этого
file_get_contents() is the preferred way to read the contents of a file into a string. It will use memory mapping techniques if supported by your OS to enhance performance.
а может и нет
попробуй

Код: Выделить всё

Yii::app()->request->sendFile(basename($foto->file),implode('',file($foto->file))); 
Тот же результат.... Может кто-нибудь воспроизвести это на Убунте и Windows ?

Аватара пользователя
timlar
Сообщения: 1382
Зарегистрирован: 2009.09.19, 17:49
Откуда: Украина, Днепропетровск
Контактная информация:

Re: Отдача картинки

Сообщение timlar »

xoma писал(а):Тот же результат.... Может кто-нибудь воспроизвести это на Убунте и Windows ?
Могу на Убунте, но только вечерком... Сейчас текучки много :(
Twitter: @timlar_ua

Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Отдача картинки

Сообщение slavcodev »

windows7, полет успешный

Код: Выделить всё

function actionTest()
{
    $file='D:/Users/User/Desktop/55.png';
    Yii::app()->request->sendFile('new'.basename($file),file_get_contents($file));
} 
Жду Yii 3!

Аватара пользователя
xoma
Сообщения: 641
Зарегистрирован: 2009.04.02, 15:24
Откуда: Ногинск
Контактная информация:

Re: Отдача картинки

Сообщение xoma »

В Убунту 10.04

Код: Выделить всё

Yii::app()->request->sendFile('IMG_5814.jpg','/home/xoma/IMG_5814.jpg');
exit;
 
После этого файл не читается.

Аватара пользователя
timlar
Сообщения: 1382
Зарегистрирован: 2009.09.19, 17:49
Откуда: Украина, Днепропетровск
Контактная информация:

Re: Отдача картинки

Сообщение timlar »

Код: Выделить всё

Yii::app()->request->sendFile('wp.jpg',file_get_contents('/home/timlar/wp.jpg'),null,true); 
Все прекрасно работает.
$ lsb_release -a
Distributor ID: Ubuntu
Description: Ubuntu 10.04.1 LTS
Release: 10.04
Codename: lucid

$ uname -a
Linux Timlar 2.6.32-24-generic #38-Ubuntu SMP Mon Jul 5 09:22:14 UTC 2010 i686 GNU/Linux

$ apache2 -v
Server version: Apache/2.2.14 (Ubuntu)
Server built: Apr 13 2010 19:28:27

$ php -v
PHP 5.3.2-1ubuntu4.2 with Suhosin-Patch (cli) (built: May 13 2010 20:01:00)
Twitter: @timlar_ua

Аватара пользователя
xoma
Сообщения: 641
Зарегистрирован: 2009.04.02, 15:24
Откуда: Ногинск
Контактная информация:

Re: Отдача картинки

Сообщение xoma »

Рыдаю и плачу!

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

Так вот в этом контроллере приложения были пресловутые перевыды строки после закрывающей ?>, ктороые и ломали файл.

Всем спасибо!

Аватара пользователя
timlar
Сообщения: 1382
Зарегистрирован: 2009.09.19, 17:49
Откуда: Украина, Днепропетровск
Контактная информация:

Re: Отдача картинки

Сообщение timlar »

Хех :) А зачем закрывать ?> ? :) Я лично не закрываю, да и в фреймворке вроде бы не закрыто нигде.
Twitter: @timlar_ua

Аватара пользователя
xoma
Сообщения: 641
Зарегистрирован: 2009.04.02, 15:24
Откуда: Ногинск
Контактная информация:

Re: Отдача картинки

Сообщение xoma »

угу, я тоже стараюсь...но привычка, блин =(

zibert02
Сообщения: 203
Зарегистрирован: 2010.11.24, 17:29

Re: Отдача картинки

Сообщение zibert02 »

это новая фича не закрывать ?>
во всех скриптах или токо в yii?

Ekstazi
Сообщения: 1428
Зарегистрирован: 2009.08.20, 22:54
Откуда: Молдова, Бельцы
Контактная информация:

Re: Отдача картинки

Сообщение Ekstazi »

Это фича пхп.

Ответить