Проблема с заголовками

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Mamikon
Сообщения: 23
Зарегистрирован: 2016.07.07, 18:35

Проблема с заголовками

Сообщение Mamikon »

Всем привет! такая проблема никак не могу разобраться уже 3 дня.

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

list($width,$height)=GetImageSize ("http://yii2.lustrika.ru/web/uploads/prod_2.jpg");
$newsize = 0;
$raz = 0;
$image = imagecreatefromjpeg("http://yii2.lustrika.ru/web/uploads/prod_2.jpg");
if($width > $height) {
    $im = ImageCreateTrueColor($width,$width);
    $newsize = $width;
    $raz = ($newsize - $height)/2;
} else if($height > $width) {
    $im = ImageCreateTrueColor($height,$height);
    $newsize = $height;
    $raz = ($newsize - $width)/2;
} else if($width == $height) {
    $im = ImageCreateTrueColor($width,$height);
    $newsize = $height;
    $raz = 0;
}
$col = imagecolorallocate($im,255,255,255);
imagefilledrectangle($im,0,0,$newsize,$newsize,$col);
Header("Content-type: image/jpeg;charset=utf-8");
imagejpeg($im,NULL,99);
imagedestroy($im); 

Никак не работает :(
выводит иероглифы, т.к в yii2 не принимает headers никак. Пробовал без yii код всё нормально. Но тут такое дело никак не получается помогите добрые люди буду благодарен!
Onotole
Сообщения: 1808
Зарегистрирован: 2012.12.24, 12:49

Re: Проблема с заголовками

Сообщение Onotole »

При чем тут Yii?
Аватара пользователя
Said
Сообщения: 138
Зарегистрирован: 2015.06.04, 10:16

Re: Проблема с заголовками

Сообщение Said »

Доброго времени суток.
Наверное кодировка здесь не надо
http://stackoverflow.com/questions/2633 ... ith-header
на вашем случаи будет

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

header("Content-type: image/jpeg");
и в контроллере надо указать на пустую лайоут или присваивать значения null

и можно оптимизировать код или сократит
Mamikon писал(а):

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

if($width > $height) {
    $im = ImageCreateTrueColor($width,$width);
    $newsize = $width;
    $raz = ($newsize - $height)/2;
} else if($height > $width) {
    $im = ImageCreateTrueColor($height,$height);
    $newsize = $height;
    $raz = ($newsize - $width)/2;
} else if($width == $height) {
    $im = ImageCreateTrueColor($width,$height);
    $newsize = $height;
    $raz = 0;
}
$col = imagecolorallocate($im,255,255,255);
imagefilledrectangle($im,0,0,$newsize,$newsize,$col);
Header("Content-type: image/jpeg;charset=utf-8");
imagejpeg($im,NULL,99);
imagedestroy($im); 

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

$max = $width > $height ? $width : $height;
$min = $width < $height ? $width : $height;

$im = ImageCreateTrueColor($max,$max);
$raz = ($max - $min)/2; // смысл от этого переменного!
$col = imagecolorallocate($im,255,255,255);
imagefilledrectangle($im,0,0,$max,$max,$col);
header("Content-type: image/jpeg");
imagejpeg($im,NULL,99);
imagedestroy($im); 
Mamikon
Сообщения: 23
Зарегистрирован: 2016.07.07, 18:35

Re: Проблема с заголовками

Сообщение Mamikon »

Said писал(а):Доброго времени суток.
Наверное кодировка здесь не надо
http://stackoverflow.com/questions/2633 ... ith-header
на вашем случаи будет

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

header("Content-type: image/jpeg"); 
и в контроллере надо указать на пустую лайоут или присваивать значения null

и можно оптимизировать код или сократит
Mamikon писал(а):

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

if($width > $height) {
    $im = ImageCreateTrueColor($width,$width);
    $newsize = $width;
    $raz = ($newsize - $height)/2;
} else if($height > $width) {
    $im = ImageCreateTrueColor($height,$height);
    $newsize = $height;
    $raz = ($newsize - $width)/2;
} else if($width == $height) {
    $im = ImageCreateTrueColor($width,$height);
    $newsize = $height;
    $raz = 0;
}
$col = imagecolorallocate($im,255,255,255);
imagefilledrectangle($im,0,0,$newsize,$newsize,$col);
Header("Content-type: image/jpeg;charset=utf-8");
imagejpeg($im,NULL,99);
imagedestroy($im); 

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

$max = $width > $height ? $width : $height;
$min = $width < $height ? $width : $height;

$im = ImageCreateTrueColor($max,$max);
$raz = ($max - $min)/2; // смысл от этого переменного!
$col = imagecolorallocate($im,255,255,255);
imagefilledrectangle($im,0,0,$max,$max,$col);
header("Content-type: image/jpeg");
imagejpeg($im,NULL,99);
imagedestroy($im); 

Cпасибо!! а как можно выключить layout в контроллере и почему это должно мешать?
Аватара пользователя
vitalik1183
Сообщения: 1675
Зарегистрирован: 2014.07.01, 08:42

Re: Проблема с заголовками

Сообщение vitalik1183 »

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

$this->layout=false; 
Если вы ставите заголовок

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

header("Content-type: image/jpeg");  
То браузер ожидает увидеть изображение, а не html!
Yii2!
Mamikon
Сообщения: 23
Зарегистрирован: 2016.07.07, 18:35

Re: Проблема с заголовками

Сообщение Mamikon »

public function beforeAction($action) {
$this->enableCsrfValidation = false;
$this->layout = false;
return parent::beforeAction($action);
}
public function actionIndex()
{
if(yii::$app->request->isAjax) {
list($width,$height)=GetImageSize ("prod_2.jpg");
$newsize = 0;
$raz = 0;
$max = $width > $height ? $width : $height;
$min = $width < $height ? $width : $height;
$im = ImageCreateTrueColor(500,500);
$raz = ($max - $min)/2;
$col = imagecolorallocate($im,255,255,255);
imagefilledrectangle($im,0,0,$max,$max,$col);
header("Content-Type: image/jpeg");
imagejpeg($im,NULL,99);
imagedestroy($im);
}
}

это у меня контроллер.

<img src="(тут полный путь)/image" >

а таким образом обращаюсь к контроллеру разве не должно работать? пустое изображение выдает(

но до контроллера доходит, но ничего не выводит.
Mamikon
Сообщения: 23
Зарегистрирован: 2016.07.07, 18:35

Re: Проблема с заголовками

Сообщение Mamikon »

Получилось!!! всем спасибо)) проблема была в headers. Почему то просто header() не принимало а вот так
Yii::$app->response->format = \yii\web\Response::FORMAT_RAW;
$headers = Yii::$app->response->headers;
$headers->add('Content-Type', 'image/jpeg');
приняло!
Ответить