Yii2フレームワークに基づくゲストブックアプリケーションにコメントを送信しようとしています。 PCのlocalhostですべてが正常に機能しますが、共有ホスティングでViewにコメントを送信したい場合、このエラーが発生します。
ここにエラーがあります:
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}
postControllerに私はこのコードを持っています:
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!';
}
}
}
エラーの117行目は次のとおりです。
echo 'Thanks for your comment.';
この問題を解決するのを手伝ってくれませんか。私は本当に行き詰まっています。
前もって感謝します
Yii 2.0.14なので、コントローラーでエコーすることはできません。応答を返す必要があります。
_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!';
}
}
}
_
エコーを回避できない場合は、メソッドの最後でexit
を呼び出して、それ以上処理されないようにするか、コードをob_start()
およびob_get_clean()
でラップすることもできます。 。
_public function actionAdd_comment() {
$model = new \app\models\Comments();
if ($model->load(Yii::$app->request->post()) && $model->validate()) {
$this->someMagicWithEcho();
exit;
}
}
_
または
_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();
}
}
_
@ rob006の解決策は正しいものとして受け入れますが、コントローラーにエコーがない状況に遭遇しましたが、エラーも発生しました。解決策を探していくつかのサイトを調べた後、私は代替案を発見しました
PHP.iniファイルをチェックして、出力バッファが有効になっていることを確認できます。存在しない場合は、php.iniにこの行を追加して有効にできます。 _output_buffering = on
_そして、どちらかが必要としないスクリプトだけをオフにします...
ob_end_flush()
を呼び出す、またはob_end_clean()
を呼び出す