Yii2 an error occurred while handling another error

I am trying to submit a comment on a guestbook application based on the Yii 2 Framework. On localhost on my PC works everything fine, but on the shared hosting when I want to submit a comment in Vi...

I am trying to submit a comment on a guestbook application based on the Yii 2 Framework. On localhost on my PC works everything fine, but on the shared hosting when I want to submit a comment in View, I get this error.

Here is the error:

An error occurred while handling another error:
    exception 'yiiwebHeadersAlreadySentException' with message 'Headers already sent in /home/mahdikas/public_html/guestbook/controllers/PostController.php on line 117.' in /home/mahdikas/public_html/guestbook/vendor/yiisoft/yii2/web/Response.php:366
    Stack trace:
    #0 /home/mahdikas/public_html/guestbook/vendor/yiisoft/yii2/web/Response.php(339): yiiwebResponse->sendHeaders()
    #1 /home/mahdikas/public_html/guestbook/vendor/yiisoft/yii2/web/ErrorHandler.php(135): yiiwebResponse->send()
    #2 /home/mahdikas/public_html/guestbook/vendor/yiisoft/yii2/base/ErrorHandler.php(111): yiiwebErrorHandler->renderException(Object(yiiwebHeadersAlreadySentException))
    #3 [internal function]: yiibaseErrorHandler->handleException(Object(yiiwebHeadersAlreadySentException))
    #4 {main}
    Previous exception:
    exception 'yiiwebHeadersAlreadySentException' with message 'Headers already sent in /home/mahdikas/public_html/guestbook/controllers/PostController.php on line 117.' in /home/mahdikas/public_html/guestbook/vendor/yiisoft/yii2/web/Response.php:366
    Stack trace:
    #0 /home/mahdikas/public_html/guestbook/vendor/yiisoft/yii2/web/Response.php(339): yiiwebResponse->sendHeaders()
    #1 /home/mahdikas/public_html/guestbook/vendor/yiisoft/yii2/base/Application.php(392): yiiwebResponse->send()
    #2 /home/mahdikas/public_html/guestbook/web/index.php(12): yiibaseApplication->run()
    #3 {main}

In the postController I have this code:

public function actionAdd_comment()
{
  //print_r($_POST);
  $model = new appmodelsComments;
  if ($model->load(Yii::$app->request->post()) && $model->validate()) {
    $model->comment_date = date('Y-m-d H:i:s');
    if ($model->save()) {
      echo 'Thanks for your comment.';
    } else {
      echo 'Failed!';
    }
  }
}

which line 117 in the error is:

echo 'Thanks for your comment.';

How can I solve this problem?

Peter Mortensen's user avatar

asked Apr 6, 2018 at 9:12

Mahdi Kashani's user avatar

4

Since Yii 2.0.14 you cannot echo in a controller. A response must be returned:

public function actionAdd_comment() {
    $model = new appmodelsComments();
    if ($model->load(Yii::$app->request->post()) && $model->validate()) {
        $model->comment_date = date('Y-m-d H:i:s');
        if ($model->save()) {
            return 'Thanks for your comment.';
        } else {
            return 'Failed!';
        }
    }
}

You may also call exit at the end of your method to prevent further processing or wrap your code with ob_start() and ob_get_clean(), if you’re not able to avoid echo.

public function actionAdd_comment() {
    $model = new appmodelsComments();
    if ($model->load(Yii::$app->request->post()) && $model->validate()) {
        $this->someMagicWithEcho();
        exit;
    }
}

or

public function actionAdd_comment() {
    $model = new appmodelsComments();
    if ($model->load(Yii::$app->request->post()) && $model->validate()) {
        ob_start();
        $this->someMagicWithEcho();
        return ob_get_clean();
    }
}

Peter Mortensen's user avatar

answered Apr 7, 2018 at 8:25

rob006's user avatar

rob006rob006

20.9k5 gold badges51 silver badges71 bronze badges

5

Although I accept rob006’s solution as correct, I have encountered a situation where there was no echo in the controller, but I also got the error. After going through several sites looking for a solution, I discovered an alternative.

You can check the php.ini file and ensure the output buffer is enabled. If not, you can enable it by adding this line in php.ini if it does not exist:

output_buffering = on

And turn it off for just the script — the script where it is not required by either…

  1. calling ob_end_flush(), or
  2. calling ob_end_clean()

Peter Mortensen's user avatar

answered Jul 19, 2018 at 20:25

Paul Wakhungu's user avatar

iTemplar

Сообщения: 7
Зарегистрирован: 2018.11.27, 18:20

An Error occurred while handling another error: Headers already sent in …

Всем привет.

Такую ошибку выдает при выводе списка моделей телефонов на сайте:
An Error occurred while handling another error:
yiiwebHeadersAlreadySentException: Headers already sent in /var/www/html/controllers/GoodsController.php on line 169.
in /var/www/html/vendor/yiisoft/yii2/web/Response.php:366
Stack trace:
#0 /var/www/html/vendor/yiisoft/yii2/web/Response.php(339): yiiwebResponse->sendHeaders()
#1 /var/www/html/vendor/yiisoft/yii2/web/ErrorHandler.php(135): yiiwebResponse->send()
#2 /var/www/html/vendor/yiisoft/yii2/base/ErrorHandler.php(111): yiiwebErrorHandler->renderException(Object(yiiwebHeadersAlreadySentException))
#3 [internal function]: yiibaseErrorHandler->handleException(Object(yiiwebHeadersAlreadySentException))
#4 {main}
Previous exception:
yiiwebHeadersAlreadySentException: Headers already sent in /var/www/html/controllers/GoodsController.php on line 169.
in /var/www/html/vendor/yiisoft/yii2/web/Response.php:366
Stack trace:
#0 /var/www/html/vendor/yiisoft/yii2/web/Response.php(339): yiiwebResponse->sendHeaders()
#1 /var/www/html/vendor/yiisoft/yii2/base/Application.php(392): yiiwebResponse->send()
#2 /var/www/html/web/index.php(12): yiibaseApplication->run()
#3 {main}

Эта ошибка вываливается только при выборе двух брендов, по которым наибольшее количество моделей в базе данных. Сама функция вот:

public function actionLists($id){

$group_guid = Groups::findOne($id)->group_guid;
$countDevice = Goods::find()
->where([‘group_guid’=>$group_guid])
->andWhere([‘enable’=>1])
->count();
$modelDevice = Goods::find()
->where([‘group_guid’=>$group_guid])
->andWhere([‘enable’=>1])
->orderBy(‘good_name’)
->all();
if ($countDevice>0){
echo «<option>выбрать…</option>»;
foreach ($modelDevice as $value){
echo «<option value='».$value->good_id.»‘>».$value->good_name.»</option>»;
}
}else{
echo «<option> — </option>»;
}

}

При выборе любого другого бренда все отрабатывает без ошибок. А на двух брендах — выдает на одном 68 записей, на втором — 71 и вываливается ошибку. Может кто подсказать, кудой копать???
Заранее прошу извинить, если что не так написал, с yii2 раньше не работал…

Аватара пользователя

Alexum

Сообщения: 683
Зарегистрирован: 2016.09.26, 10:00

iTemplar

Сообщения: 7
Зарегистрирован: 2018.11.27, 18:20

andku83

Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: An Error occurred while handling another error: Headers already sent in …

Сообщение

andku83 » 2018.11.29, 16:24

В отношении ошибки

An Error occurred while handling another error:
yiiwebHeadersAlreadySentException:

решение:

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

    public function actionLists($id)
    {
        ...

        $options = '';
        if ($countDevice>0){
    
            $options .= "<option>выбрать...</option>"; // вместо echo "<option>выбрать...</option>";
            foreach ($modelDevice as $value){
                $options .=  "<option value='".$value->good_id."'>".$value->good_name."</option>";// echo вместо "<option value='".$value->good_id."'>".$value->good_name."</option>";
            }
        }else{
            $options .=  "<option> - </option>";// вместо echo "<option> - </option>";
        }

        return $options;
    }

но по хорошему тут все нужно переделать.

iTemplar

Сообщения: 7
Зарегистрирован: 2018.11.27, 18:20

Re: An Error occurred while handling another error: Headers already sent in …

Сообщение

iTemplar » 2018.12.04, 15:47

andku83 писал(а): ↑2018.11.29, 16:24
но по хорошему тут все нужно переделать.

Согласен…))) Благодарю за помощь, немного покурил маны, с вашей помощью — переписал контроллер, ошибки больше не вываливает…)))

Кстати, возник еще один вопрос: может ли yii2 файлы за гружать в облако??? Ну, к примеру, в Dropbox и передавать ссылку на файл, а не сам файл???

Аватара пользователя

ElisDN

Сообщения: 5825
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

iTemplar

Сообщения: 7
Зарегистрирован: 2018.11.27, 18:20

Re: An Error occurred while handling another error: Headers already sent in …

Сообщение

iTemplar » 2019.01.04, 18:48

Благодарю, разбираюсь…)))
И еще один вопрос: есть список пользователей сайта, у каждого есть признак группы (тип строка)… Также на сайте присутствуют мультипликаторы, у которых есть признак принадлежности к той или иной группе (тип строка)… Может ли yii2 при входе на сайт пользователя подбирать ему свои мультипликаторы или нужно этот запрос выполнять только тогда, когда пользователь сайта обращается к мультипикаторам??? Ну и связать их между собой, пользователя и мультипликаторы по этому признаку…

Аватара пользователя

ElisDN

Сообщения: 5825
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Аватара пользователя

ElisDN

Сообщения: 5825
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Такую ошибку выдает при выводе списка моделей телефонов на сайте:
An Error occurred while handling another error:
yiiwebHeadersAlreadySentException: Headers already sent in /var/www/html/controllers/GoodsController.php on line 169.
in /var/www/html/vendor/yiisoft/yii2/web/Response.php:366
Stack trace:
#0 /var/www/html/vendor/yiisoft/yii2/web/Response.php(339): yiiwebResponse->sendHeaders()
#1 /var/www/html/vendor/yiisoft/yii2/web/ErrorHandler.php(135): yiiwebResponse->send()
#2 /var/www/html/vendor/yiisoft/yii2/base/ErrorHandler.php(111): yiiwebErrorHandler->renderException(Object(yiiwebHeadersAlreadySentException))
#3 [internal function]: yiibaseErrorHandler->handleException(Object(yiiwebHeadersAlreadySentException))
#4

Previous exception:
yiiwebHeadersAlreadySentException: Headers already sent in /var/www/html/controllers/GoodsController.php on line 169.
in /var/www/html/vendor/yiisoft/yii2/web/Response.php:366
Stack trace:
#0 /var/www/html/vendor/yiisoft/yii2/web/Response.php(339): yiiwebResponse->sendHeaders()
#1 /var/www/html/vendor/yiisoft/yii2/base/Application.php(392): yiiwebResponse->send()
#2 /var/www/html/web/index.php(12): yiibaseApplication->run()
#3

Эта ошибка вываливается только при выборе двух брендов, по которым наибольшее количество моделей в базе данных. Сама функция вот:

public function actionLists($id)<

$group_guid = Groups::findOne($id)->group_guid;
$countDevice = Goods::find()
->where([‘group_guid’=>$group_guid])
->andWhere([‘enable’=>1])
->count();
$modelDevice = Goods::find()
->where([‘group_guid’=>$group_guid])
->andWhere([‘enable’=>1])
->orderBy(‘good_name’)
->all();
if ($countDevice>0) <
echo «»;
foreach ($modelDevice as $value) <
echo «»;
>
>else <
echo «»;
>

При выборе любого другого бренда все отрабатывает без ошибок. А на двух брендах — выдает на одном 68 записей, на втором — 71 и вываливается ошибку. Может кто подсказать, кудой копать.
Заранее прошу извинить, если что не так написал, с yii2 раньше не работал.

Источник

Error on render exception page for «yiibaseUnknownMethodException» #13697

What steps will reproduce the problem?

call not exist method for controller or model

What is the expected result?

view normal exception page

What do you get instead?

render exception page break with error

or view nginx «502 Bad Gateway» page

Additional info

Q A
Yii version 2.0.11.2
PHP version 5.6.30
Operating system Windows 10

The text was updated successfully, but these errors were encountered:

Check YII_DEBUG and YII_ENV constants.

Thanks for posting in our issue tracker.
In order to properly assist you, we need additional information:

  • When does the issue occur?
  • What do you see?
  • What was the expected result?
  • Can you supply us with a stacktrace? (optional)
  • Do you have exact code to reproduce it? Maybe a PHPUnit tests that fails? (optional)

This is an automated comment, triggered by adding the label status:need more info .

Constants

name value
YII_DEBUG true
YII_ENV dev

Can you supply us with a stacktrace?

break full stacktrace

Do you have exact code to reproduce it?

error also reproduced on next configuration

Источник

Почему отправляются какие-то заголовки, если использую include_once?

После перехода с php5.6 на php7.2 и обновления версии самого yii до последней
появилась ошибка

public function actionPrinttour($code)
<

Начало файла index2.php

причем на проде ошибка другая

40 строка файла second2.php

Мне совершенно не понятно, какие заголовки могут там отправляться?!
Все файлы в кодировке UTF-8

  • Вопрос задан более трёх лет назад
  • 504 просмотра

Средний 1 комментарий

почему вы так подключаете файлы? что, содержат файлы index2.php и second2.php; в контроллерах, в общем то, include не используют

Есть вероятность, что дело в так называемом BOM-маркере, который присутствует по умолчанию в UTF-8 кодировке. Сделайте бекап проблемного файла, который добавляется через include_once, и попробуйте пересохранить его код в UTF-8 без BOM. Такое можно сделать, например, в Notepad++.

Обновлено
Сейчас заметил, что в начале php-файла, который вы подключаете, html-код. Так делать нельзя. Вот пример функции, которую использую я, чтобы получать содержимое из файлов с html-кодом в переменную и не отправлять никаких заголовков.

Подключать вместо include таким образом

Что характерно, дополненный ответ столь же полезен, и имеет такое же отношение к вопросу, что и изначальный.

Источник

An Error occurred while handling another error: exception ‘yiiwebHeadersAlreadySentException&#039

Установил Yii2 и OpenServer . Настройки: Apache 2.2 PHP 5.4 .

Я не понимаю, что это значит:

An Error occurred while handling another error: exception ‘ yiiwebHeadersAlreadySentException’ with message &039; Headers already sent in C:OpenServerdomainsyiicontrollersMyController.php on line 34.’ in C:OpenServerdomainsyiivendoryiisoftyii2webResponse.php:366 Stack trace: 0 C:OpenServerdomainsyiivendoryiisoftyii2webResponse.php(339): yiiwebResponse-> sendHeaders() 1 C:OpenServerdomainsyiivendoryiisoftyii2webErrorHandler.php(135): yiiwebResponse->send() 2 C:OpenServerdomainsyiivendoryiisoftyii2baseErrorHandler.php(111): yiiwebErrorHandler-> renderException(Object(yiiwebHeadersAlreadySentException)) 3 [internal function]: yiibaseErrorHandler-> handleException(Object(yiiwebHeadersAlreadySentException)) 4

Previous exception: exception ‘ yiiwebHeadersAlreadySentException’ with message ‘Headers already sent in C:OpenServerdomainsyiicontrollersMyController.php on line 34.’ in C:OpenServerdomainsyiivendoryiisoftyii2webResponse.php:366 Stack trace: 0 C:OpenServerdomainsyiivendoryiisoftyii2webResponse.php(339): yiiwebResponse-> sendHeaders() 1 C:OpenServerdomainsyiivendoryiisoftyii2baseApplication.php(392): yiiwebResponse-> send() 2 C:OpenServerdomainsyiiwebindex.php(12): yiibaseApplication-> run() 3

Ошибка появляется при отправке ajax, вот он:

Как исправить и что это такое? Откуда и почему ошибка появляется?

Ответы (1 шт):

Ошибка Headers already sent говорит о том, что заголовки были уже отправлены и не получится их отправить снова. Такое случается, когда вебмастер хочет из контроллера (. ) отобразить какие-то данные. Разве на лекциях не говорили, что контроллер не для этого? Разве не говорили, что данные отображает вьюшка?

Если же есть совершенная необходимость отправить данные клиенту из контроллера, тогда надо завершить выполнение скриптов приложения после отправки данных, без отрисовки вьюшки.

В данном конкретном примере надо либо print_r( $_GET); убрать, либо после этой строки добавить exit();

Также, настоятельно рекомендую забыть про $_POST $_GET , если уж начали работать с фреймворками. Привыкаем к использованию Yii::$app->request->post() Yii::$app->request->get()

Источник

Почему отправляются какие-то заголовки, если использую include_once?

После перехода с php5.6 на php7.2 и обновления версии самого yii до последней
появилась ошибка

public function actionPrinttour($code)
<

Начало файла index2.php

причем на проде ошибка другая

40 строка файла second2.php

Мне совершенно не понятно, какие заголовки могут там отправляться?!
Все файлы в кодировке UTF-8

  • Вопрос задан более трёх лет назад
  • 504 просмотра

Средний 1 комментарий

почему вы так подключаете файлы? что, содержат файлы index2.php и second2.php; в контроллерах, в общем то, include не используют

Есть вероятность, что дело в так называемом BOM-маркере, который присутствует по умолчанию в UTF-8 кодировке. Сделайте бекап проблемного файла, который добавляется через include_once, и попробуйте пересохранить его код в UTF-8 без BOM. Такое можно сделать, например, в Notepad++.

Обновлено
Сейчас заметил, что в начале php-файла, который вы подключаете, html-код. Так делать нельзя. Вот пример функции, которую использую я, чтобы получать содержимое из файлов с html-кодом в переменную и не отправлять никаких заголовков.

Подключать вместо include таким образом

Что характерно, дополненный ответ столь же полезен, и имеет такое же отношение к вопросу, что и изначальный.

Источник

Установил Yii2 и OpenServer. Настройки: Apache 2.2 PHP 5.4.

Я не понимаю, что это значит:

An Error occurred while handling another error: exception ‘
yiiwebHeadersAlreadySentException’
with message &039;
Headers already sent in C:OpenServerdomainsyiicontrollersMyController.php on line 34.’
in C:OpenServerdomainsyiivendoryiisoftyii2webResponse.php:366 Stack trace: 0 C:OpenServerdomainsyiivendoryiisoftyii2webResponse.php(339): yiiwebResponse->
sendHeaders() 1 C:OpenServerdomainsyiivendoryiisoftyii2webErrorHandler.php(135): yiiwebResponse->send() 2 C:OpenServerdomainsyiivendoryiisoftyii2baseErrorHandler.php(111): yiiwebErrorHandler->
renderException(Object(yiiwebHeadersAlreadySentException)) 3 [internal function]: yiibaseErrorHandler->
handleException(Object(yiiwebHeadersAlreadySentException)) 4 {main} Previous exception: exception ‘
yiiwebHeadersAlreadySentException’ with message ‘Headers already sent in C:OpenServerdomainsyiicontrollersMyController.php on line 34.’
in C:OpenServerdomainsyiivendoryiisoftyii2webResponse.php:366 Stack trace: 0 C:OpenServerdomainsyiivendoryiisoftyii2webResponse.php(339): yiiwebResponse->
sendHeaders() 1 C:OpenServerdomainsyiivendoryiisoftyii2baseApplication.php(392): yiiwebResponse->
send() 2 C:OpenServerdomainsyiiwebindex.php(12): yiibaseApplication->
run() 3 {main}

Ошибка появляется при отправке ajax, вот он:

$js = JS $('btn').on('click', function() {
  $.ajax({
    url: 'index.php?r=my/test',
    data: {
      test: 'GET-123'
    },
    type: 'GET',
    success: function(res) {
      console.log(res);
    },
    error: function() {
      alert('Error!');
    }
  });
});
JS;
$this - > registerJs($js);

Так принимаю:

public
function actionTest($id = '777') {
  $this - > layout = 'b';
  if (Yii::$app - > request - > isAjax) {
    print_r($_GET);
    return 'test';
  }
  return "Controller - My; Action - Test";
}

Как исправить и что это такое? Откуда и почему ошибка появляется?

Я пытаюсь оставить комментарий к приложению гостевой книги на основе Yii2 Framework. на localhost на моем ПК все работает нормально, но на общем хостинге, когда я хочу оставить комментарий в View, я получаю эту ошибку.

Вот ошибка:

An Error occurred while handling another error:
exception 'yiiwebHeadersAlreadySentException' with message 'Headers already sent in /home/mahdikas/public_html/guestbook/controllers/PostController.php on line 117.' in /home/mahdikas/public_html/guestbook/vendor/yiisoft/yii2/web/Response.php:366
Stack trace:
#0 /home/mahdikas/public_html/guestbook/vendor/yiisoft/yii2/web/Response.php(339): yiiwebResponse->sendHeaders()
#1 /home/mahdikas/public_html/guestbook/vendor/yiisoft/yii2/web/ErrorHandler.php(135): yiiwebResponse->send()
#2 /home/mahdikas/public_html/guestbook/vendor/yiisoft/yii2/base/ErrorHandler.php(111): yiiwebErrorHandler->renderException(Object(yiiwebHeadersAlreadySentException))
#3 [internal function]: yiibaseErrorHandler->handleException(Object(yiiwebHeadersAlreadySentException))
#4 {main}
Previous exception:
exception 'yiiwebHeadersAlreadySentException' with message 'Headers already sent in /home/mahdikas/public_html/guestbook/controllers/PostController.php on line 117.' in /home/mahdikas/public_html/guestbook/vendor/yiisoft/yii2/web/Response.php:366
Stack trace:
#0 /home/mahdikas/public_html/guestbook/vendor/yiisoft/yii2/web/Response.php(339): yiiwebResponse->sendHeaders()
#1 /home/mahdikas/public_html/guestbook/vendor/yiisoft/yii2/base/Application.php(392): yiiwebResponse->send()
#2 /home/mahdikas/public_html/guestbook/web/index.php(12): yiibaseApplication->run()
#3 {main}

в postController у меня есть этот код:

public function actionAdd_comment()
{
//print_r($_POST);
$model = new appmodelsComments;
if ($model->load(Yii::$app->request->post()) && $model->validate()) {
$model->comment_date = date('Y-m-d H:i:s');
if ($model->save()) {
echo 'Thanks for your comment.';
} else {
echo 'Failed!';
}
}
}

какая строка 117 в ошибке:

echo 'Thanks for your comment.';

Можете ли вы помочь мне решить эту проблему? Я действительно застрял.

заранее спасибо

3

Решение

Начиная с Yii 2.0.14, вы не можете отображать эхо в контроллере. Ответ должен быть возвращен:

public function actionAdd_comment() {
$model = new appmodelsComments();
if ($model->load(Yii::$app->request->post()) && $model->validate()) {
$model->comment_date = date('Y-m-d H:i:s');
if ($model->save()) {
return 'Thanks for your comment.';
} else {
return 'Failed!';
}
}
}

Вы также можете позвонить exit в конце вашего метода, чтобы предотвратить дальнейшую обработку или обернуть ваш код ob_start() а также ob_get_clean(), если вы не можете избежать эха.

public function actionAdd_comment() {
$model = new appmodelsComments();
if ($model->load(Yii::$app->request->post()) && $model->validate()) {
$this->someMagicWithEcho();
exit;
}
}

или же

public function actionAdd_comment() {
$model = new appmodelsComments();
if ($model->load(Yii::$app->request->post()) && $model->validate()) {
ob_start();
$this->someMagicWithEcho();
return ob_get_clean();
}
}

5

Другие решения

Хотя я принимаю решение @ rob006 как правильное, я столкнулся с ситуацией, когда в контроллере не было эха, но я также получил ошибку. Пройдя несколько сайтов в поисках решения, я обнаружил альтернативу

Вы можете проверить файл PHP.ini и убедиться, что выходной буфер включен. если нет, вы можете включить его, добавив эту строку в php.ini, если она не существует.
output_buffering = on
и отключить его только для сценария сценария, где он не требуется ни для одного …

  1. призвание ob_end_flush(), или же
  2. призвание ob_end_clean()

1

I am trying to submit a comment on a guestbook application based on the Yii 2 Framework. On localhost on my PC works everything fine, but on the shared hosting when I want to submit a comment in View, I get this error.

Here is the error:

An error occurred while handling another error:
    exception 'yiiwebHeadersAlreadySentException' with message 'Headers already sent in /home/mahdikas/public_html/guestbook/controllers/PostController.php on line 117.' in /home/mahdikas/public_html/guestbook/vendor/yiisoft/yii2/web/Response.php:366
    Stack trace:
    #0 /home/mahdikas/public_html/guestbook/vendor/yiisoft/yii2/web/Response.php(339): yiiwebResponse->sendHeaders()
    #1 /home/mahdikas/public_html/guestbook/vendor/yiisoft/yii2/web/ErrorHandler.php(135): yiiwebResponse->send()
    #2 /home/mahdikas/public_html/guestbook/vendor/yiisoft/yii2/base/ErrorHandler.php(111): yiiwebErrorHandler->renderException(Object(yiiwebHeadersAlreadySentException))
    #3 [internal function]: yiibaseErrorHandler->handleException(Object(yiiwebHeadersAlreadySentException))
    #4 {main}
    Previous exception:
    exception 'yiiwebHeadersAlreadySentException' with message 'Headers already sent in /home/mahdikas/public_html/guestbook/controllers/PostController.php on line 117.' in /home/mahdikas/public_html/guestbook/vendor/yiisoft/yii2/web/Response.php:366
    Stack trace:
    #0 /home/mahdikas/public_html/guestbook/vendor/yiisoft/yii2/web/Response.php(339): yiiwebResponse->sendHeaders()
    #1 /home/mahdikas/public_html/guestbook/vendor/yiisoft/yii2/base/Application.php(392): yiiwebResponse->send()
    #2 /home/mahdikas/public_html/guestbook/web/index.php(12): yiibaseApplication->run()
    #3 {main}

In the postController I have this code:

public function actionAdd_comment()
{
  //print_r($_POST);
  $model = new appmodelsComments;
  if ($model->load(Yii::$app->request->post()) && $model->validate()) {
    $model->comment_date = date('Y-m-d H:i:s');
    if ($model->save()) {
      echo 'Thanks for your comment.';
    } else {
      echo 'Failed!';
    }
  }
}

which line 117 in the error is:

echo 'Thanks for your comment.';

How can I solve this problem?

  1. Home

  2. php — An Error occurred while handling another error: yiiwebHeadersAlreadySentException: Headers already sent

997 votes

1 answers

Get the solution ↓↓↓

I am developing a rest api web service with yii2.
in response as json on localhost, a null object end of json response to me.
and on host a error end of json.

In localhost, the response I receive is as follows :
response on localhost :

{
    "status": 1,
    "data": {
        "data": "Factor Api"
    }
}null

but on server, the response I receive is as follows :
response on server :

{
    "status": 1,
    "data": {
        "data": "Factor Api"
    }
}<pre>An Error occurred while handling another error:
yiiwebHeadersAlreadySentException: Headers already sent in /home/factorap/public_html/common/components/Api.php on line 53. in /home/factorap/public_html/vendor/yiisoft/yii2/web/Response.php:366
Stack trace:
#0 /home/factorap/public_html/vendor/yiisoft/yii2/web/Response.php(339): yiiwebResponse-&gt;sendHeaders()
#1 /home/factorap/public_html/vendor/yiisoft/yii2/web/ErrorHandler.php(136): yiiwebResponse-&gt;send()
#2 /home/factorap/public_html/vendor/yiisoft/yii2/base/ErrorHandler.php(135): yiiwebErrorHandler-&gt;renderException(Object(yiiwebHeadersAlreadySentException))
#3 [internal function]: yiibaseErrorHandler-&gt;handleException(Object(yiiwebHeadersAlreadySentException))
#4 {main}
Previous exception:
yiiwebHeadersAlreadySentException: Headers already sent in /home/factorap/public_html/common/components/Api.php on line 53. in /home/factorap/public_html/vendor/yiisoft/yii2/web/Response.php:366
Stack trace:
#0 /home/factorap/public_html/vendor/yiisoft/yii2/web/Response.php(339): yiiwebResponse-&gt;sendHeaders()
#1 /home/factorap/public_html/vendor/yiisoft/yii2/base/Application.php(656): yiiwebResponse-&gt;send()
#2 /home/factorap/public_html/common/components/Api.php(56): yiibaseApplication-&gt;end()
#3 /home/factorap/public_html/api/controllers/SiteController.php(92): commoncomponentsApi-&gt;sendSuccessResponse(Array)
#4 [internal function]: apicontrollersSiteController-&gt;actionIndex()
#5 /home/factorap/public_html/vendor/yiisoft/yii2/base/InlineAction.php(57): call_user_func_array(Array, Array)
#6 /home/factorap/public_html/vendor/yiisoft/yii2/base/Controller.php(180): yiibaseInlineAction-&gt;runWithParams(Array)
#7 /home/factorap/public_html/vendor/yiisoft/yii2/base/Module.php(528): yiibaseController-&gt;runAction('', Array)
#8 /home/factorap/public_html/vendor/yiisoft/yii2/web/Application.php(103): yiibaseModule-&gt;runAction('', Array)
#9 /home/factorap/public_html/vendor/yiisoft/yii2/base/Application.php(386): yiiwebApplication-&gt;handleRequest(Object(yiiwebRequest))
#10 /home/factorap/public_html/api/v2/index.php(17): yiibaseApplication-&gt;run()
#11 {main}</pre>

common/components/Api.php on line 53 = $this->setHeader(200);

My function to send response :
api function :

    public function sendSuccessResponse($data = false,$additional_info = false)
    {

        $this->setHeader(200);

        $response = [];
        $response['status'] = 1;

        if (is_array($data))
            $response['data'] = $data;

        if ($additional_info) {
            $response = array_merge($response, $additional_info);
        }

        $response = Json::encode($response, JSON_PRETTY_PRINT);
        //$strpos = strpos($response,'null');


        if (isset($_GET['callback'])) {
            /* this is required for angularjs1.0 client factory API calls to work */
            $response = $_GET['callback'] . "(" . $response . ")";

            echo $response;
        } else {
            echo $response;
        }

        Yii::$app->end();

    }

and controller action to run.
controller action :

    public function actionIndex()
    {
        Yii::$app->api->sendSuccessResponse(['data' => 'Factor Api']);
    }

Please help me to fix them.

2021-11-29

Write your answer


698

votes

Answer

Solution:

There is another way to do it. like this:frontend/controllers/ApiController.php

class ApiController extends yiirestController
{
    public function behaviors()
    {
        return [
            'contentNegotiator' => [
                'class'   => yiifiltersContentNegotiator::className(),
                'formats' => [
                    'application/json' => yiiwebResponse::FORMAT_JSON,
                ],
            ],
        ];
    }

    public function actionApi()
    {
        $model = commonmodelsUser::find()->one();

        return $model->getAttributes();
    }
}

frontend/config/main.php:

return [
    // other code
    'components'          => [
        // other code
        'request'      => [
            'enableCookieValidation' => true,
            'cookieValidationKey'    => '[email protected]',
            'parsers'                => [
                'application/json' => 'yiiwebJsonParser',
            ],
        ],
        'urlManager'   => [
            'enablePrettyUrl'     => true,
            'enableStrictParsing' => true,
            'showScriptName'      => false,
            'rules'               => [
                '<controller:w+>/<action:w+>' => '<controller>/<action>',
                ['class' => 'yiirestUrlRule', 'controller' => 'api'],
            ],
        ],
        // other code
    ],
];

open http://yoursite.com/api/users

{
    id: 1,
    username: "admin",
    auth_key: "IVi31eKxa-EE3ki7X7ToKb6uO8dknNrV",
    password_hash: "$2y$13$oMiNRYUYb0gPcWpheiYdb.0Xs/lWk7Ixcb.F5ch38ExbiSok1TfRi",
    password_reset_token: null,
    email: "[email protected]",
    status: 10,
    created_at: 1603274263,
    updated_at: 1603274263,
    verification_token: "cTnvRiub3BpoCEwx-yFUb10zCtu0TpxK_1603274263",
}


Share solution ↓

Additional Information:

Date the issue was resolved:

2021-11-29

Link To Source

Link To Answer
People are also looking for solutions of the problem: filter_sanitize_string deprecated

Didn’t find the answer?

Our community is visited by hundreds of web development professionals every day. Ask your question and get a quick answer for free.


Similar questions

Find the answer in similar questions on our website.

Write quick answer

Do you know the answer to this question? Write a quick response to it. With your help, we will make our community stronger.


About the technologies asked in this question

PHP

PHP (from the English Hypertext Preprocessor — hypertext preprocessor) is a scripting programming language for developing web applications. Supported by most hosting providers, it is one of the most popular tools for creating dynamic websites.
The PHP scripting language has gained wide popularity due to its processing speed, simplicity, cross-platform, functionality and distribution of source codes under its own license.
https://www.php.net/

Yii

Yii is a simple yet high performance generic component framework based framework. It is known for its high performance, but above all, it is famous for its simplicity. This framework appeared in December 2008. It allows you to use third-party code, and its Gii code generator allows you to quickly create basic structures from which you can build your own solutions.
https://www.yiiframework.com/

Angular

Angular is one of the most powerful JavaScript frameworks out there. Google uses this platform to develop a Single Page Application (SPA). This development environment is known primarily because it provides developers with a better environment for combining JavaScript with HTML and CSS. More than half a million sites like google.com, youtube.com, etc. use Angular.
https://angular.io/

HTML

HTML (English «hyper text markup language» — hypertext markup language) is a special markup language that is used to create sites on the Internet.
Browsers understand html perfectly and can interpret it in an understandable way. In general, any page on the site is html-code, which the browser translates into a user-friendly form. By the way, the code of any page is available to everyone.
https://www.w3.org/html/



Welcome to programmierfrage.com

programmierfrage.com is a question and answer site for professional web developers, programming enthusiasts and website builders. Site created and operated by the community. Together with you, we create a free library of detailed answers to any question on programming, web development, website creation and website administration.

Get answers to specific questions

Ask about the real problem you are facing. Describe in detail what you are doing and what you want to achieve.

Help Others Solve Their Issues

Our goal is to create a strong community in which everyone will support each other. If you find a question and know the answer to it, help others with your knowledge.

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Yii2 activerecord save error
  • Yii2 activeform error options
  • Yii2 500 internal server error
  • Yii2 404 error
  • Yii log error

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии