这个问题涉及到php.ini中的两个变量。
variables_order = "EGPCS"
variables_order 系统在定义PHP预定义变量,EGPCS 是 Environment, Get, Post, Cookie, and Server 的简写。
这个变量主要是在php执行时,对超级变量创建的设置。EGPCS对应的超级变量为$_ENV,$_GET,$_POST,$_COOKIE,$_SERVER。如果variables_order被设置为"",则对应的超级全局变量的值都为空数组。所以,要想$_REQUEST包含的预定义变量的值,variables_order必须有对应的设置。例如,variables_order = "G",则$_REQUEST中肯定不会有post的值。
在register_globals=on的情况,这个配置的顺序将影响对应变量的值,重复key,后边的会覆盖前边的。
request_order = "PGC"
这个变量,说明$_REQUEST包含哪些类型的外部数据、数据加载的顺序。这个是有顺序的,如果key重复,后边的就会覆盖前边的值。
比如,$_GET里面有个$_GET['id']=2,$_POST里有一个$_POST['id']=3。如果request_order = "PG"的形式设置,那么$_REQUEST['id']=2。如果request_order = "GP"的形式设置,则$_REQUEST['id']=3。
$_REQUEST的实际应用中,要避免Cookie中的值覆盖Get, Post的值。尽量少用$_REQUEST,能不用就不用。