php5.3 register_globals,在PHP 5.3中PHP寄存器全局支持?(PHP register globals support in PHP 5.3?)...

在PHP 5.3中PHP寄存器全局支持?(PHP register globals support in PHP 5.3?)

我一直在使用PHP 5.2并使用register_globals ON。 现在我转向PHP 5.3,我明白我必须改变一些编码。 我已经读过这篇文章,但我仍然没有清楚地了解我必须做出哪些改变。

在5.2我使用

session_start();

在我的表格顶部。 在5.3中我还需要这样做吗?

我目前也使用像这样的变种

$_SESSION[php_g_name"] = "John";

要么

if ($_SESSION["php_g_name"] == "")

可以继续在5.3中使用吗? 如果没有,vars的语法是什么?

谢谢你的任何澄清。

I've been using PHP 5.2 and using register_globals ON. Now I'm moving to PHP 5.3 and I understand I have to change some of my coding. I've read up on this but I still don't have a clear picture of what changes I have to make.

In 5.2 I use

session_start();

at the top of my forms. In 5.3 do I still need to do this?

I also currently use vars like this

$_SESSION[php_g_name"] = "John";

or

if ($_SESSION["php_g_name"] == "")

Is that ok to continue to use in 5.3? If not, what's the syntax for vars?

Thanks for any clarification.

原文:https://stackoverflow.com/questions/21213624

更新时间:2019-10-29 18:14

最满意答案

PHP Register_Globals是最具标志性的,但也是PHP最受欢迎的“功能”之一。 这使得PHP在早期获得了如此多的牵引力和使用率。

你可以做到这一点

//for a url example.com/myfile.php?UserName=Toby

echo "Hello $UserName";

?>

它使得从_GET和_POST访问变量变得非常容易,而且(如你的情况下)_SESSION。

然而,它具有非常糟糕的安全隐患,并且默认情况下已关闭,因为php 4左右(有人会告诉我)。

基本上它对你意味着,如果你这样做是为了访问你的会话变量

session_start();

echo $php_g_name ;

使用寄存器全局变量$ php_g_name会有一个值,现在它不会。 然而,这将有效。

session_start();

echo $_SESSION["php_g_name"] ;

如果你现在正在这样做,你应该没事。 您需要更改代码以始终使用包含数组,例如$_SESSION

PHP Register_Globals was one of the most iconic but also one of the most reviled 'features' of PHP. It was what allowed PHP in the early days to gain so much traction and usage.

you could do this

//for a url example.com/myfile.php?UserName=Toby

echo "Hello $UserName";

?>

It made it very easy to get access to variables from _GET and _POST but also (as in your case) _SESSION.

However it has enormously bad security implications and has been off by default since php 4 or so (someone will tell me exactly).

Basically what it means to you is that if you were doing this to get access to your session variables

session_start();

echo $php_g_name ;

with register globals $php_g_name would have had a value, now it wont. This however will work.

session_start();

echo $_SESSION["php_g_name"] ;

If you are currently doing that anyway you should be fine. You will need to change you code to always use the containing array eg $_SESSION

2014-02-03

相关问答

是不是这是一个扩展包? 如果是的话,下载扩展包,然后再php.ini中添加配置语句。

您可以使用全局范围内的 提取来模拟register_globals : extract($_REQUEST);

或者使用全局和变量变量将其置于独立函数 function globaling()

{

foreach ($_REQUEST as $key => $val)

{

global ${$key};

${$key} = $val;

}

}

PS我认为你已经发布了应用程序,不想改变它的任何内容。 您可以使

...

PHP Register_Globals是最具标志性的,但也是PHP最受欢迎的“功能”之一。 这使得PHP在早期获得了如此多的牵引力和使用率。 你可以做到这一点 <?php

//for a url example.com/myfile.php?UserName=Toby

echo "Hello $UserName";

?>

它使得从_GET和_POST访问变量变得非常容易,而且(如你的情况下)_SESSION。 然而,它具有非常糟糕的安全隐患,并且默认情况下已关闭,因为php 4左右(有人会

...

有一些方法可以处理PHP手册中描述的register_globals 。 register_globals ini设置不能在运行时由ini_set() ,所以如果你不能用.htaccess或web服务器配置文件来设置,那么提供的方法就是官方解决方法。 它基本上提供了这段代码来模拟兼容性: <?php

// Emulate register_globals off

function unregister_GLOBALS()

{

if (!ini_get('register_globals')

...

在命令行中更改指令或php.ini文件: C:\>php -?

[...]

-c | Look for php.ini file in this directory

[...]

-d foo[=bar] Define INI entry foo with value 'bar'

例如: php -d register_globals=1 do-stuff.php

当然,从长远来看,最好简单地修复脚本。 否则,你会发现有一天脚本在系统升级后甚至不会运行。

...

?:是先前可用的条件运算符的形式: expr ? val_if_true : val_if_false

在5.3中,可以省略中间部分,例如expr ?: val_if_false ,相当于: expr ? expr : val_if_false

从手册 : 由于PHP 5.3,可以省略条件运算符的中间部分。 表达式expr1 ?: expr3 expr1如果expr1求值为TRUE ,则expr1 ?: expr3返回expr1 ,否则返回expr3 。 ?: is a form of the

...

使用$_REQUEST全局数组来访问变量: ($month+1)与($_REQUEST['month']+1) Use $_REQUEST global array to access to variables: ($month+1) is the same as ($_REQUEST['month']+1)

选项很容易解决这个问题。 获得一个新主机。 PHP 5.3非常过时。 现在很少有理由不转移到提供至少PHP 5.5的新主机。 您可以使用Laravel Forge并在Digital Ocean或Linode上设置新服务器,每月只需5美元。 使用专为PHP> = 5.3.7设计的Laravel 4.1 由于使用了特征和短数组语法,您将无法使用4.2来处理PHP 5.3。 The options are quite easy to solve this. Get a new host. PHP 5.3

...

根据我的经验,内置肥皂类的互操作性是迄今为止我用PHP肥皂库看到的最好的。 主要问题通常是理解WSDL在类型方面的要求。 使用__getMethods()和__getTypes()的组合,您应该能够弄清楚如何构建对象(或数组)以轻松地传递给远程方法。 我已经使用SoapClient连接到至少.NET和WebSphere以及其他许多问题。 In my experience the interoperability of the built in soap classes is the best I'

...

你可以从GPC创建自己的全局变量: foreach (['_GET', '_POST', '_COOKIE'] as $source) {

foreach ($$source as $key => $value) {

$GLOBALS[$key] = $value;

}

}

免责声明:不要真的这样做。 So I came up with a temporary solution in the meantime. We utilize an include ofte

...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值