把配置文件里面 register_globals  关掉!

解决方案 »

  1.   


    楼主用phpinfo看看register_globals及PHP版本是多少???(在phpinfo)
      

  2.   

    你的PHP是4.4.X版本的吧,这个应该是它的一个bug首先register_global=off保留你的这个问题在一个网页上有描述
    http://www.spiration.co.uk/post/1231/Your%20script%20possibly%20relies%20on%20a%20session%20side-effect解决方法是,先给出$from_url的值
    然后$_SESSION[from_url]=$from_url然后在http://blog.csdn.net/spidertiger/archive/2006/07/24/969571.aspx上面给出了更详细的解释,如下In PHP 4.2.3, they made a change to the way that the session code works that results in PHP generating a warning when a session is created. In order to resolve this, we have to update some code in Gallery. This warning has no effect, except that it shows upon screen. You can make it go away by editing your php.ini and setting 
    session.bug_compat_warn to offand restart Apache. 
    意思就是更改session.bug_compat_warn的值为off,重新启动apache
    并且这个是警告信息,没有说明什么错误。
      

  3.   

    楼上几位麻烦看清帖子再回复,写得很清楚,环境:php5,register_globals 为 off 
      

  4.   

    我测了下,没有有你说的问题
    a.php
    <?php
    session_start();$_SESSION['from_url'] = null;$from_url = 'test2';?>
    <a href="b.php">b.php</a>
    b.php<?php
    session_start();
    echo $_SESSION['from_url'];
    print_r($_SESSION);
    ?>结果Array ( [from_url] => ) 
      

  5.   

    7楼你的php版本是多少啊?还有register_globals设置的是on还是off?
      

  6.   

    就错误而言,很大原因还是因为register_globals没有关闭.
    正常环境下是没有这个问题的.建议还是从PHP的环境配置上下功夫.
    phpinfo();查看一下,register_globals有没有被关闭.有时候你可能修改的不是正确的php.ini,或者没有重启web服务器.
      

  7.   

    因为你用了 null,他会在该页被当成 globals 处理$_SESSION['from_url'] = false;
    $_SESSION['from_url'] = "";
    用都可以,你要给他一个实值
    给null他会当成是参考效果等同
    $varname = "from_url";
    @$_SESSION['from_url'] = &$$$varname;这是他的自动注册机制问题
      

  8.   

    @$_SESSION['from_url'] = &$$varname; 
      

  9.   

    刚刚又做了下测试,register_globals如果是on的状态下,反而不会出现这个错误提示的。但是$from_url = 'test2'同样也赋到session里了。error_reporting(2047);
    session_start();
    $_SESSION['from_url'] = null;
    $from_url = 'test2';
    echo 111;
    echo $a;
    flush();
    sleep(5);
    echo 222;
    加入sleep发现,是在脚本执行结束的时候才会出现错误提示,我只知道session在脚本执行结束时会将内存中$_SESSION变量的值写入到sesion文件里,是不是还进行了其他的操作?导致出现这个错误提示,希望能得到确定的答案。
    PS:php版本5.2.0
      

  10.   


    这位朋友说的应该是对的,
    有两个地方不明白,麻烦再请教下,
    给null他会当成是参考,这个“参考”是指什么?
    session的自动注册机制是怎么回事?这个是针对php5的吗?
    以前没听说过,google也没有搜到,能否给个连接。
    谢谢~
      

  11.   

    register_globals ... 什么都 globals了当然没错 =.=pass by value , ref 搜一下就有了session的自动注册机制google搜不到, 也没有连接 ._.
      

  12.   

    by ref只是比喻,真实情况要看php session部份的源码
      

  13.   

    register_globals 为on时,会出现楼主的情况的,关闭的话,应该不会的!本地测试了一下
    关闭后
    ( ! ) Notice: Undefined variable: from_url in D:\iis\test2.php on line 5 
    Call Stack 
    # Time Memory Function Location 
    1 0.0024 130128 {main}( ) ..\test2.php:0 
      

  14.   

    test.php
    <?php
    session_start();$_SESSION['from_url'] = null;$from_url = 'test2';
    ?>
    <a href="test2.php">test</a>test2.phpsession_start();echo $_SESSION['from_url'];
    echo $from_url;
      

  15.   

    关闭之后
    echo $_SESSION['from_url'];
    为空!
    我用的是PHP5.2.6