>백엔드 개발 >PHP 튜토리얼 >php版本的不同在用CI框架header或redirect遇到的问题!

php版本的不同在用CI框架header或redirect遇到的问题!

WBOY
WBOY원래의
2016-06-06 20:46:551308검색

比如:管理员后台的登入我是这么写的

<code> $where = array(
       'adminname'=>strtolower(trim($this->input->post('adminname',TRUE))),
       'password'=>strtolower(trim(md5($this->input->post('password',TRUE))))
    );//有时我会把session放在数据库查询判断里边,也就是下边这个if里边
    $_SESSION['adminname'] = $where['adminname'];
    $select = join(',', array_keys( $where ) );
    if($this->m->selects('admin',$where,$select)){
            redirect('admin/Home/index');
    }else{
        $data['error'] = '用户名和密码错误,请重新填写';
        $this->load->view('admin/message',$data);
    }
</code>

在windows的php5.3它是正常跳转到后台首页的!
但是在liunx的php5.2.17它会报错。
php版本的不同在用CI框架header或redirect遇到的问题!

再比如会员后台判断是否登入状态我是这么写的!

<code>    if(empty($_SESSION['username'])){
    header("Location:" . site_url('home/login'));
    }
    $_SESSION['username']//在空值的情况这个if并没有阻拦非登入的访客让他跳转至登入。
$_SESSION['username']$_SESSION['VIP']$_SESSION['phone']$_SESSION['email']
//以上这些都是空值,当然会报错,上图:
</code>

php版本的不同在用CI框架header或redirect遇到的问题!

还有以及会员登入状态点击退出我是这么写的!

<code>public function exits(){
$where['username'] = $_SESSION['username'];
$IP['U_IP'] = $_SERVER['REMOTE_ADDR'];
if($this->db->update('users', $IP, $where)){
unset($_SESSION['username']);
unset($_SESSION['phone']);
unset($_SESSION['email']);
redirect('home/index');
}}
</code>

它同样也会报错,和后台的登入报的错一模一样!
php版本的不同在用CI框架header或redirect遇到的问题!

注意:以上这些报错在本地笔记本上边都是可以正常运行的!
是否是服务器配置问题呢?
见:http://segmentfault.com/q/1010000000427492查看phpinfo;

回复内容:

比如:管理员后台的登入我是这么写的

<code> $where = array(
       'adminname'=>strtolower(trim($this->input->post('adminname',TRUE))),
       'password'=>strtolower(trim(md5($this->input->post('password',TRUE))))
    );//有时我会把session放在数据库查询判断里边,也就是下边这个if里边
    $_SESSION['adminname'] = $where['adminname'];
    $select = join(',', array_keys( $where ) );
    if($this->m->selects('admin',$where,$select)){
            redirect('admin/Home/index');
    }else{
        $data['error'] = '用户名和密码错误,请重新填写';
        $this->load->view('admin/message',$data);
    }
</code>

在windows的php5.3它是正常跳转到后台首页的!
但是在liunx的php5.2.17它会报错。
php版本的不同在用CI框架header或redirect遇到的问题!

再比如会员后台判断是否登入状态我是这么写的!

<code>    if(empty($_SESSION['username'])){
    header("Location:" . site_url('home/login'));
    }
    $_SESSION['username']//在空值的情况这个if并没有阻拦非登入的访客让他跳转至登入。
$_SESSION['username']$_SESSION['VIP']$_SESSION['phone']$_SESSION['email']
//以上这些都是空值,当然会报错,上图:
</code>

php版本的不同在用CI框架header或redirect遇到的问题!

还有以及会员登入状态点击退出我是这么写的!

<code>public function exits(){
$where['username'] = $_SESSION['username'];
$IP['U_IP'] = $_SERVER['REMOTE_ADDR'];
if($this->db->update('users', $IP, $where)){
unset($_SESSION['username']);
unset($_SESSION['phone']);
unset($_SESSION['email']);
redirect('home/index');
}}
</code>

它同样也会报错,和后台的登入报的错一模一样!
php版本的不同在用CI框架header或redirect遇到的问题!

注意:以上这些报错在本地笔记本上边都是可以正常运行的!
是否是服务器配置问题呢?
见:http://segmentfault.com/q/1010000000427492查看phpinfo;

把报错的英文拿到 google 翻译翻译一下看什么意思,然后找输出的地方在哪里。在代码的执行流程的不同地方 var_dump(FILE . LINE);,然后根据输出判断出错的地方。
检查所有 PHP 文件的编码和换行符,注意不要在 ?> 之后有任何字符。实在查不出来就把 PHP 文件后面所有的 ?> 删掉。

PS

<code>$_SESSION['adminname'] = $where['adminname'];
</code>

这一行应该放到 if 里面,否则算是有漏洞。

Cannot modify header infomation
是在header之前有了输出,很大可能是因为工程里某个文件的BOM没有被删除,保存文件时一定要使用UTF8 NO BOM格式的。

undefined index是notice级别的报错,一般是可以忽略的
php.ini设置error_reporting = E_ALL & ~E_NOTICE,隐藏掉notice级别的就行。

header前面不能有输出呀

在ci中是用session的话,最好使用ci的session类库,手册有使用说明session类

另外这种警告式的报错:undefined index最好处理下,一般都是使用前没有判断isset($array[index])导致的,虽然说可以通过设置error_reproting关闭,但是为了程序的稳健性,还是手工修复下

header之前有其他输出, 除掉即可解决,也可以用ob系列的函数。 ob系列函数

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.