2011-04-12 51 views
8

¿Cuál es la diferencia entre $_SERVER['PATH_INFO'] y $_SERVER['ORIG_PATH_INFO']? ¿Cómo los uso?

Cuando ejecuto print_r($_SERVER), PATH_INFO y ORIG_PATH_INFO no están presentes en la matriz. Por qué no? ¿Cómo puedo habilitarlos?

He leído el manual de PHP en ellos, pero todavía no los entiendo.

Respuesta

14

La variable PATH_INFO sólo está presente si se invoca un script PHP como esto:

http://www.example.com/phpinfo.php/HELLO_THERE 

Es sólo la parte /HELLO_THERE después de la secuencia de comandos .php. Si no invoca la URL así, no habrá una variable de entorno $_SERVER["PATH_INFO"].

El prefijo PORIG_ es algo poco común. PATH_INFO es una variable estándar de entorno CGI, y nunca debe tener el prefijo. ¿Dónde leíste eso? (Hubo algunas cuestiones en torno a PHP3/PHP4 Si ha invocado el intérprete PHP a través de cgi-bin/- pero casi nadie ha tales configuraciones de hoy.)

Como referencia: http://www.ietf.org/rfc/rfc3875

+0

Creo que está destinado a ser 'ORIG_PATH_INFO'. Parece que algunas configuraciones de servidor crean esto en lugar de 'PATH_INFO'. – Phil

+0

Entonces es bastante seguro una configuración de controlador CGI. PHP usaría PATH_INFO sobre SCRIPT_FILENAME en algunas configuraciones, por lo que el servidor probablemente esté configurado para usar un nombre alternativo para path_info. – mario

1

PATH_INFO y ORIG_PATH_INFO se usan muy poco. Éstos se refieren a cualquier cosa en la ruta de solicitud (la parte de la URL desde el primero/en) que viene después del nombre del archivo y la cadena de consulta. En general, no tendrá un PATH_INFO en una URL.

Supongo que te refieres a ORIG_PATH_INFO y no a PORIG_PATH_INFO. La información de ruta puede ser manipulada por cosas como mod_rewrite y los propios scripts PHP. ORIG_PATH_INFO es PATH_INFO tal como estaba en la solicitud original, antes de que se realizara cualquier reescritura u otra manipulación en la cadena.

+8

'PATH_INFO' se usa tanto en Symfony como en ZF, por lo que no lo llamaría" rara vez se usa " – Phil

+0

Solo para agregar a esto porque necesitaba usar' PATH_INFO' y me equivoqué un poco al decir 'PATH_INFO' que aparentemente no se usaba mucho. Basado en WordPress usando esto internamente: https://github.com/WordPress/WordPress/blob/4.4.4/wp-includes/class-wp.php#L155. Es justo decir que se usó [muchísimo] (http: //www.opensourcecms.com/general/cms-marketshare.php) ¡así que úsala si lo necesitas! –

+0

"... que viene después del nombre del archivo y la cadena de consulta." - Tenga en cuenta que PATH_INFO viene _antes_ de la cadena de consulta, no después de ella. – MrWhite

6

probar esto:

$path_info = !empty($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : (!empty($_SERVER['ORIG_PATH_INFO']) ? $_SERVER['ORIG_PATH_INFO'] : ''); 
+0

Day saver gracias. –

Cuestiones relacionadas