PHP具有全局变量,可以在脚本的任何范围内访问。其中三个变量($_GET
,$_POST
,$_COOKIE
)存储在第四个变量($_REQUEST
)中。
$_GET
通过URL参数传递给当前脚本的关联变量数组。
请考虑以下示例,其中发送和访问URL。
http://www.example.com/myPage.php?myVar=myVal
echo $_GET["myVar"]; // returns "myVal"
$_POST
当使用application / x-www-form-urlencoded或multipart / form-data作为请求中的HTTP Content-Type时,通过HTTP POST方法传递给当前脚本的关联变量数组。
使用它的一个例子如下。
<form action="somePage.php" method="POST">
<input type="text" name="myVar" value="myVal" />
<input type="submit" name="submit" value="Submit" />
</form>
echo $_POST["myVar"]; // returns "myVal"
$_COOKIE
通过HTTP Cookies传递给当前脚本的关联变量数组
setcookie("myVar", "myVal", time() + 3600);
echo $_COOKIE["myVar"]; // returns "myVal"
$_REQUEST
一个关联数组,默认情况下包含
$_GET
,$_POST
和$_COOKIE
的内容。
$_REQUEST
包含所有三个一个数组,可通过$_REQUEST["myVar"]
访问。
我们假设,无论出于何种原因,我对$_GET
,$_POST
和$_COOKIE
使用相同的名称。
$_REQUEST
中存储的内容的优先级是什么。
假设我通过URL设置发送的数据,通过表单发布,并设置一个彼此相同名称的cookie(我知道这是一个奇怪的场景)。
假设我使用了名称&#34;示例&#34;。
以下输出的输出是什么?
if ($_REQUEST["example"] == $_GET["example"]) echo "GET";
else if ($_REQUEST["example"] == $_POST["example"]) echo "POST";
else if ($_REQUEST["example"] == $_COOKIE["example"]) echo "COOKIE";
如果$_GET
,$_POST
和$_COOKIE
都有一个存储有相同名称的值;哪一个将$_REQUEST
以该名称存储?
答案 0 :(得分:5)
在php.ini
文件中有2个指令:request_order
和variables_order
request_order string
This directive describes the order in which PHP registers GET, POST and Cookie variables into the _REQUEST array. Registration is done from left to right, newer values override older values. If this directive is not set, variables_order is used for $_REQUEST contents. Note that the default distribution php.ini files does not contain the 'C' for cookies, due to security concerns.
和
variables_order string
Sets the order of the EGPCS (Environment, Get, Post, Cookie, and Server) variable parsing. For example, if variables_order is set to "SP" then PHP will create the superglobals $_SERVER and $_POST, but not create $_ENV, $_GET, and $_COOKIE. Setting to "" means no superglobals will be set. If the deprecated register_globals directive is on, then variables_order also configures the order the ENV, GET, POST, COOKIE and SERVER variables are populated in global scope. So for example if variables_order is set to "EGPCS", register_globals is enabled, and both $_GET['action'] and $_POST['action'] are set, then $action will contain the value of $_POST['action'] as P comes after G in our example directive value.
答案 1 :(得分:4)
php.ini
文件中有一行描述variables_order
。例如:
variables_order = "GPC"
G
为获取,P
为发布,C
为Cookie。
在这种情况下,第一个Get变量设置为$_REQUEST
,下一个Post变量设置为它,最后一个Cookie变量设置为它。所以优先考虑的是cookie,然后是Post,然后是Get。
您可以更改variables_order
文件中php.ini
的值,随意更改优先级。
P.S:您可以在variables_order
的值中写出G,P,C,S和E. S代表Session,E代表环境变量。
P.S:在PHP 5.3中,在request_order
文件中引入了php.ini
指令,该指令设置了直接在$_REQUEST
数组中设置变量的顺序。