2009-09-14 14 views
8

Acabo de ver este código mientras estudiaba el código fuente de wordpress (PHP). Puede ver que mergre/turn todos los valores get y post en 1 request array.

Ahora, como yo lo sé, $ _GET y $ _POST ya están disponibles llamando a $ _REQUEST SIN usando la función array_merge(), ¿qué idea de por qué harían esto?

$_REQUEST = array_merge($_GET, $_POST); 

Respuesta

17

Eso es porque el valor predeterminado $_REQUEST es una fusión de $_GET, $_POST Y $_COOKIE. Además, el orden en el que las variables de estos superglobales se fusionan en $_REQUEST depende de la configuración de variables_order ini y a partir de PHP 5.3.0 también puede estar influenciada por request_order. así que yo creo, que el desarrollador quería asegurarse $_REQUEST consta de sólo $_GET y $_POST, fusionado en ese orden en particular, si no se tiene acceso a la configuración ini (en un servidor compartido, por ejemplo). Usted ve, variables_order y request_order no son configurables por script.

HTH

3

Esto es por lo que si usted tiene una variable GET y POST con una variable del mismo nombre, se elegirá la variable posteriormente sobre el conseguir uno.

También puede que no quiera las galletas en la variable $ _REQUEST.

+2

En realidad, elegirá $ _POST sobre $ _GET. array_merge manual: http://www.php.net/manual/en/function.array-merge.php – Havenard

+0

"[...] elegirá la variable GET sobre POST". Eso no es cierto; es al revés. Los valores de las últimas matrices con las claves correspondientes sobrescribirán los valores anteriores. Consulte http://www.php.net/array_merge –

+0

Información fija. –

1

No sé específicamente por qué se hizo donde lo vio, pero ya lo he visto antes cuando se realizó algún procesamiento sobre los valores en una matriz u otra y desea fusionar esos cambios nuevamente en $ _REQUEST para que cualquier persona que use $ _REQUEST obtenga los cambios aunque se hayan hecho con las variables $ _POST o $ _GET.

Esto viene a colación en situaciones como WordPress tiene porque los desarrolladores de plugins podrían estar utilizando cualquiera de esas variables para tener acceso a los datos y el núcleo de Wordpress necesitarían para asegurarse de que todos reciben los mismos datos.

¿Por qué no le gustaría hacerlo a $ _REQUEST directamente? Porque $ _REQUEST contiene una tonelada de información adicional que $ _POST y $ _GET no tienen. Es posible que no desee aplicar su procesamiento a todos esos bits adicionales.

6

$_REQUEST contiene los contenidos de $_GET, $_POST y $_COOKIE arrays de forma predeterminada. Quizás quieran excluir variables de COOKIE, ya que generalmente no se usa para ese propósito.

+0

+1 Simplemente escribiendo lo mismo. – Havenard

+0

ya, quizás por razones de seguridad, quieren eliminar COOKIES de $ _REQUEST, poder usar GET y POST juntos. +1 para las grandes mentes que piensan igual. – mauris

+0

sí, esto es un vector de ataque XSS común, porque JavaScript malicioso puede establecer VARs galletas sin el conocimiento del usuario, y por defecto de PHP para GPC significa que estos valores cookie modificar el que el usuario escribe en el formulario. – joelhardi

Cuestiones relacionadas