因为我已将yii应用程序移动到其他共享主机并且应用程序已运行... index.php?r =使用登录凭据进行站点/登录我得到了警告:
session_regenerate_id(): Cannot regenerate session id - headers already sent
actionLogin
的代码:
public function actionLogin($name = null )
{
$model=new LoginForm;
if ($name) $model->username = $name;
if(isset($_POST['ajax']) && $_POST['ajax']==='login-form')
{
echo CActiveForm::validate($model);
Yii::app()->end();
}
if(isset($_POST['LoginForm']))
{
$model->attributes=$_POST['LoginForm'];
// validate user input and redirect to the previous page if valid
if (headers_sent($filename, $linenum))
{
echo "Headers have been sent in {$filename} line number is {$linenum}\n"
exit;
}
if($model->validate() && $model->login())
$this->redirect(Yii::app()->user->returnUrl);
}
// display the login form
$this->render('login',array('model'=>$model));
}
文档和论坛已经说过BOM的问题。然而在我的记事本++中,所有文件都保存为 UTF-8而没有BOM。 我应该对文件进行特殊检查吗?哪个? 或者可能有其他原因导致错误?
我添加了headers_sent($filename, $linenum)
函数(参见上面的代码)来跟踪已发送的标题,但没有结果。
答案 0 :(得分:10)
使用
ob_start()
在文件的开头。
答案 1 :(得分:3)
通常在回显或打印后发送标题时会出现此错误。如果在特定页面上出现此错误,请确保在调用start_session()之前页面没有回显任何内容。
不可预测的错误示例:
<?php //a white-space before <?php also send for output and arise error
session_start();
session_regenerate_id();
//your page content
有时它在本地计算机中无关紧要,但在远程服务器中则很重要。
答案 2 :(得分:0)
让用户在使用$ model-&gt; login()
的函数中回显任何内容答案 3 :(得分:0)
我在Yii Project的main.php开头有一个空行,删除它解决了我的问题。
答案 4 :(得分:0)
根据我的经验,它主要是白色空间的错误。有时候是一个空间 打开php标签或某些时候文件末尾的空格 结束后?&gt;
/* white spaces here*/ <?php
//YOUR CODE
?> /* white spaces here
答案 5 :(得分:0)
在我的情况下,也是Yii应用程序,在部署到新的基础结构后登录到Web应用程序时会引发相同的错误。我能够比较旧基础架构和新基础架构之间的配置文件,结果发现我忘记在php-fpm容器的 php.ini 中启用输出缓冲。
This old discussion关于GitHub上Yii的问题板上的错误消息,为我提供了有关在配置文件中查找内容的提示。
现在在我的 php.ini 中,我具有以下设置:
; Note: Output buffering can also be controlled via Output Buffering Control
; functions.
; Possible Values:
; On = Enabled and buffer is unlimited. (Use with caution)
; Off = Disabled
; Integer = Enables the buffer and sets its maximum size in bytes.
; Note: This directive is hardcoded to Off for the CLI SAPI
; Default Value: Off
; Development Value: 4096
; Production Value: 4096
; http://php.net/output-buffering
output_buffering = 4096
希望它对其他人也有帮助。
答案 6 :(得分:0)
尝试使用
ob_start();
如果这不起作用,请尝试关注
ob_start();
ob_clean();