动态定义未定义的变量PHP

时间:2013-06-04 13:02:37

标签: php variables getter-setter

我刚刚修改了之前由其他人开发的现有网站。

在PHP文件中进行更改时,我注意到未成功声明未声明的变量(甚至在包含的文件中)。

我无法理解这是如何完成的。它是否使用PHP的魔术方法(_get和_set)?

一个示例场景就是这样。

<?php
    if($name != ""){
        //do process
    }
?>

<form method="POST">
    <input type="hidden" name="name" value="" />
</form>

在正常情况下,上面的代码会为未定义的变量抛出错误。我还可以看到上面的所有变量主要用于隐藏输入或$ _GET变量。

但是上面的代码在我正在开发的网站中运行得很好,即使$ name变量尚未分配给$ _POST ['name']或$ _REQUEST ...

任何人都可以建议一种方法在PHP中做这样的事情,或者我在这里遗漏了一些东西。

2 个答案:

答案 0 :(得分:1)

在旧版本的PHP中,您可以设置register_globals,从而将$_REQUEST数组的所有元素(以及$_POST$_GET等)隐式转换为变量像这样。

但是,从版本5.4开始,此功能已被删除,因为它会导致混淆并可能带来安全风险,因为如果您没有正确初始化它们,用户可以在脚本中注入变量。

因此,例如,如果$_POST数组看起来像这样

$_POST = array ( 'myVar' => 1, 'myOtherVar' => 2 );

在PHP上使用register_globals生成了两个额外的变量:

$myVar == 1
$myOtherVar == 2

参考文献:

答案 1 :(得分:1)

如果php.ini已开启,我宁愿查看您的register_global。这将允许存储变量而不声明它们,所有变量($_POST, $_GET ..)将自动转换为变量。

这是一个糟糕的实践,可能会导致严重的安全问题。我希望你查看这篇有用的帖子

Why is REGISTER_GLOBALS so bad?