我刚刚修改了之前由其他人开发的现有网站。
在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中做这样的事情,或者我在这里遗漏了一些东西。
答案 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 ..)
将自动转换为变量。
这是一个糟糕的实践,可能会导致严重的安全问题。我希望你查看这篇有用的帖子