我在页面中有以下内容,例如/mypage?myvar=oldvalue
$_SESSION['myvar'] = $_GET['myvar'];
$myvar = 'a_new_string'
现在$_SESSION['myvar']
有价值'a_new_string'
这是设计使然吗?
我怎样才能复制它的值而'myvar'
不是引用它?
这是一个功能而不是错误:-)
幸运的是你可以关闭它,在你的 php.ini 中设置register_globals = off
register_globals 是魔鬼的发明。幸运的是,在 PHP 6.0 中它将被完全禁用。这不仅仅是一个巨大的安全问题,它让人们感到困惑。请在您的 php.ini 中使用 register_globals = Off 将其关闭 更多信息:http : //us2.php.net/register_globals 您也可以使用命令 if (ini_get(register_globals)) echo "turn it off! :)';
我已经在 register_globals 打开和关闭的情况下对此进行了测试,但无法重现它。您使用的是什么版本的 PHP(我在 5.2.6 上)。
运行后:
<?php
session_start();
$_GET['myvar'] = '';
$_SESSION['myvar'] = $_GET['myvar'];
$myvar = 'a_new_string';
var_dump($_SESSION);
?>
在 PHP 5.2.6 我得到这个:
array(1) { ["myvar"]=> string(0) "" }
$_Get['myvar'] 是一个数组项 $myvar 是一个变量。这两者之间没有关系
($_GET 是一个超全局数组)
$myarry=array('myvar'=>'myvalue');- 这里 myvar 是数组变量中的一项 $myarray $myvar='';- 这里 myvar 本身就是一个变量。