重定向() 给出 header() 错误,即使没有向浏览器输出任何内容


redirect() is giving header() error even though nothing is being output to the browser

所以基本上,我收到一条错误消息,内容如下:

无法修改标头信息 - 标头已由 发送(输出从 D:''xampp''htdocs''star''application''controllers''process_login.php:1 开始)

我知道该错误的含义是什么,但我无法弄清楚输出是从哪里开始的。我在process_login.php文件中没有空格,也没有echo删除的任何内容。

我通过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');
    }
}

我开始认为问题可能出在此控制器文件之前加载的其他文件中。因此,它说输出从第 1 行开始。

我设法解决了它。

我参考了这个SO答案,它奏效了。不知道主要index.php怎么能成为麻烦制造者。有人愿意解释一下吗?

我会说和@Shaifullslam一样,看看这里的poin 3。可能是您在尝试查看索引时无意中按了回车键.php。因为我犯了那个错误。

关于ob_start();你可以在这里阅读所以基本上为什么它不会给你错误,因为响应的输出首先由 PHP 缓冲。所以它不会引起错误。当缓冲区打开时,php 不会发送任何输出或响应。拿一个容易阅读的php手册,也有类似的问题

试试这个

redirect(base_url().'process_login/');
相关文章: