redirect() 给出 header() 错误,即使没有任何内容输出到浏览器
redirect() is giving header() error even though nothing is being output to the browser
所以基本上,我收到一条错误消息:
Cannot modify header information - headers already sent by (output started at D:\xampp\htdocs\star\application\controllers\process_login.php:1)
我知道那个错误是什么意思,但我不知道输出是从哪里开始的。我在 process_login.php
文件中没有空格,也没有任何 echo
-ed 出来。
我通过 http://localhost/star/index.php/star
URL
访问登录表单
星级控制器
class Star extends CI_Controller {
public function index()
{
$this->load->view('login');
}
}
在提交表单时,我将发布到 process_login 控制器。
process_login 控制器(它甚至没有结束标记以避免空白)
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Process_login extends CI_Controller {
public function index()
{
$this->load->library('form_validation');
$this->form_validation->set_rules('userid', 'Username', 'required');
$this->form_validation->set_rules('password', 'Password',
'required|callback_check_valid['.trim($this->input->post('userid')).']');
if ($this->form_validation->run() == FALSE)
{
$this->load->view('login');
}
else
{
redirect('dashboard'); // this is the problem area
}
}
public function check_valid($pw, $un)
{
if($un)
{
$this->load->model('user');
if($this->user->is_authenticated($un, $pw))
{
return true;
}
else
{
$this->form_validation->set_message('check_valid',
'Invalid login. Please try again!');
return false;
}
}
}
}
/* End of file process_login.php */
仪表板控制器
class Dashboard extends CI_Controller {
public function index()
{
$this->load->view('admin_area', array('page_title'=>'Dashboard');
}
}
我假设 process_login.php:1
意味着输出从该文件的第 1 行开始?如果是这样,我在该文件中没有任何输出或空格。那为什么我会收到错误消息?
调试
从 process_login.php
文件中删除所有内容后,我仍然遇到同样的错误。这是文件的精简版本:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Process_login extends CI_Controller {
public function index()
{
redirect('dashboard');
}
}
我开始认为问题可能出在这个控制器文件之前加载的其他文件中。因此,它说输出从 Line 1.
开始
我设法解决了。
我参考了这个 SO Answer 并且它起作用了。不知道主要 index.php
怎么会是麻烦制造者。有人愿意解释一下吗?
我会说和@Shaifullslam 一样,看 here 点 3。
可能是您在尝试查看 index.php 时无意中按下了回车键。因为我犯了那个错误。
关于 ob_start();你可以阅读 here
所以基本上为什么它不会给你错误,因为响应的输出首先由 php 缓冲。所以它不会导致错误。当缓冲区打开时,php 不会发送任何输出或响应。轻松阅读 php manual and also there is question similar
试试这个
redirect(base_url().'process_login/');
所以基本上,我收到一条错误消息:
Cannot modify header information - headers already sent by (output started at D:\xampp\htdocs\star\application\controllers\process_login.php:1)
我知道那个错误是什么意思,但我不知道输出是从哪里开始的。我在 process_login.php
文件中没有空格,也没有任何 echo
-ed 出来。
我通过 http://localhost/star/index.php/star
URL
星级控制器
class Star extends CI_Controller {
public function index()
{
$this->load->view('login');
}
}
在提交表单时,我将发布到 process_login 控制器。
process_login 控制器(它甚至没有结束标记以避免空白)
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Process_login extends CI_Controller {
public function index()
{
$this->load->library('form_validation');
$this->form_validation->set_rules('userid', 'Username', 'required');
$this->form_validation->set_rules('password', 'Password',
'required|callback_check_valid['.trim($this->input->post('userid')).']');
if ($this->form_validation->run() == FALSE)
{
$this->load->view('login');
}
else
{
redirect('dashboard'); // this is the problem area
}
}
public function check_valid($pw, $un)
{
if($un)
{
$this->load->model('user');
if($this->user->is_authenticated($un, $pw))
{
return true;
}
else
{
$this->form_validation->set_message('check_valid',
'Invalid login. Please try again!');
return false;
}
}
}
}
/* End of file process_login.php */
仪表板控制器
class Dashboard extends CI_Controller {
public function index()
{
$this->load->view('admin_area', array('page_title'=>'Dashboard');
}
}
我假设 process_login.php:1
意味着输出从该文件的第 1 行开始?如果是这样,我在该文件中没有任何输出或空格。那为什么我会收到错误消息?
调试
从 process_login.php
文件中删除所有内容后,我仍然遇到同样的错误。这是文件的精简版本:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Process_login extends CI_Controller {
public function index()
{
redirect('dashboard');
}
}
我开始认为问题可能出在这个控制器文件之前加载的其他文件中。因此,它说输出从 Line 1.
开始我设法解决了。
我参考了这个 SO Answer 并且它起作用了。不知道主要 index.php
怎么会是麻烦制造者。有人愿意解释一下吗?
我会说和@Shaifullslam 一样,看 here 点 3。 可能是您在尝试查看 index.php 时无意中按下了回车键。因为我犯了那个错误。
关于 ob_start();你可以阅读 here 所以基本上为什么它不会给你错误,因为响应的输出首先由 php 缓冲。所以它不会导致错误。当缓冲区打开时,php 不会发送任何输出或响应。轻松阅读 php manual and also there is question similar
试试这个
redirect(base_url().'process_login/');