Ich versuche, einen Kommentar zu einer Gästebuchanwendung auf Basis von Yii2 Framework einzureichen. auf localhost auf meinem PC funktioniert alles einwandfrei, aber auf dem Shared Hosting, wenn ich einen Kommentar in View übermitteln möchte, erhalte ich diesen Fehler.
Hier ist der Fehler:
An Error occurred while handling another error:
exception 'yii\web\HeadersAlreadySentException' 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): yii\web\Response->sendHeaders()
#1 /home/mahdikas/public_html/guestbook/vendor/yiisoft/yii2/web/ErrorHandler.php(135): yii\web\Response->send()
#2 /home/mahdikas/public_html/guestbook/vendor/yiisoft/yii2/base/ErrorHandler.php(111): yii\web\ErrorHandler->renderException(Object(yii\web\HeadersAlreadySentException))
#3 [internal function]: yii\base\ErrorHandler->handleException(Object(yii\web\HeadersAlreadySentException))
#4 {main}
Previous exception:
exception 'yii\web\HeadersAlreadySentException' 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): yii\web\Response->sendHeaders()
#1 /home/mahdikas/public_html/guestbook/vendor/yiisoft/yii2/base/Application.php(392): yii\web\Response->send()
#2 /home/mahdikas/public_html/guestbook/web/index.php(12): yii\base\Application->run()
#3 {main}
im postController habe ich diesen Code:
public function actionAdd_comment()
{
//print_r($_POST);
$model = new \app\models\Comments;
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!';
}
}
}
welche Zeile 117 im Fehler ist:
echo 'Thanks for your comment.';
Können Sie mir bitte helfen, dieses Problem zu lösen? Ich bin wirklich festgefahren.
Danke im Voraus
Seit Yii 2.0.14 können Sie im Controller kein Echo ausführen. Antwort muss zurückgegeben werden:
public function actionAdd_comment() {
$model = new \app\models\Comments();
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!';
}
}
}
Sie können auch exit
am Ende Ihrer Methode aufrufen, um die weitere Verarbeitung zu verhindern, oder Ihren Code mit ob_start()
und ob_get_clean()
umschließen, wenn Sie kein Echo vermeiden können.
public function actionAdd_comment() {
$model = new \app\models\Comments();
if ($model->load(Yii::$app->request->post()) && $model->validate()) {
$this->someMagicWithEcho();
exit;
}
}
oder
public function actionAdd_comment() {
$model = new \app\models\Comments();
if ($model->load(Yii::$app->request->post()) && $model->validate()) {
ob_start();
$this->someMagicWithEcho();
return ob_get_clean();
}
}
Obwohl ich die Lösung von @ rob006 als korrekt akzeptiere, ist eine Situation aufgetreten, in der kein Echo im Controller aufgetreten ist, aber ich habe auch den Fehler erhalten. Nachdem ich mehrere Standorte auf der Suche nach einer Lösung durchlaufen hatte, entdeckte ich eine Alternative
Sie können die Datei PHP.ini überprüfen und sicherstellen, dass der Ausgabepuffer aktiviert ist. Wenn nicht, können Sie es aktivieren, indem Sie diese Zeile in php.ini hinzufügen, falls sie nicht vorhanden ist .output_buffering = on
ob_end_flush()
oderob_end_clean()
aufrufen