Heim  >  Artikel  >  Backend-Entwicklung  >  php版本的不同在用CI框架header或redirect遇到的问题!

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

WBOY
WBOYOriginal
2016-06-06 20:46:551253Durchsuche

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

<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系列函数

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn