做一点贡献:翻译了一篇科普文章,请大家批评指正
取得变量:在 PHP 4.2+ 中递交的 input value
大量的文章在发表,因为它关于 PHP4.2+ 与 register_globals。
如果你有一段程序以前工作得很好,而你升级了 PHP 就运行得有问题,请继续读下去。
以前,在 PHP 中,你可能有这样的一个 FORM:
<form action="page.php" method="post">
<input type="text" name="variable">
<input type="submit">
</form>
你可以很容易地访问 input value:
PHP:
<?php
echo $variable;
?>
问题就出现在 PHP4.2 之后。在安装时,PHP 默认设置egister_globals 为 off 。register_globals 是在 PHP 的设置文件 php.ini 中允许上述变量用法的设置。PHP4.2 版本之前,register_globals 默认设置为 "on" 。然而,为了防止潜在的不安全代码, PHP 组织决定把 register_globals 默认设置为 "off"。
这意味着上面的代码不再工作。
还是用上面的 FORM,我们可以通过以下几种方式访问 input value、
由于我们是通过 POST 方式递交数据的,可以用像这样用 _POST 数组:
PHP:
<?php
echo $_POST['variable'];
?>
或者,如果上面的 FORM 用 GET 的方式递交数据,则可以用 _GET 数组取得 input value:
PHP:
<?php
echo $_GET['variable'];
?>
如果因为某种原因,你不能确定是用的 POST 还是用的 GET 方式递交 FORM 的,你可以简单地用 _REQUEST 数组:
PHP:
<?php
echo $_REQUEST['variable'];
?>
还有一些为 cookies 与 sessions 设置的数组 _COOKIE ,_SESSION,访问方式相同。也还有如 _SERVER, _FILES, _ENV and GLOBALS 等数组。这些数组作为 PHP 的超级全局变量,因为它们在任何地方都是有效的,即使在函数与类库中:
PHP:
<?php
function printPost ()
{
foreach ( $_POST as $key => $value )
echo "\$_POST[$key] => $value<br>\n";
}
?>
在函数中,为了使用超级全局变量,你不需要写 'global $_POST;' ,它是默认的。
需要了解更多的信息,查看 PHP online Manual 中的这一页:
http://www.php.net/manual/en/language.variables.predefined.php
_________________
Jason Lotito
PHPComplete.com - Your complete PHP Resource
---------
翻译:javen javen@sina.com