2011-10-11 27 views
39

Accedo a un servidor PHP utilizando REST: todos los datos se pasan en una solicitud GET como parámetros de URL. Uno de los parámetros llega al servidor en query_string, pero no está en _GET global. Pero acortando el parámetro (el límite parece ser de alrededor de 512 caracteres) lo deja pasar.Tamaño máximo de los parámetros de URL en _GET

Suponiendo que he diagnosticado el problema correctamente, ¿hay alguna manera de cambiar este tamaño máximo? No he encontrado ninguna explicación en la documentación, ni siquiera una mención de este límite. Esto está en Debian squeeze/Apache 2.2.16/PHP 5.3.3.

+0

La longitud máxima para una solicitud GET suele ser de alrededor de 2k. –

+1

Gracias, pero lo que necesito saber es la longitud máxima de un parámetro GET individual en PHP. – alexfernandez

Respuesta

65

Ok, parece que algunas versiones de PHP tienen una limitación de longitud de parametros GET:

Tenga en cuenta que las configuraciones de PHP con el parche suhosin instalado tendrá un límite predeterminado de 512 caracteres de parámetros GET . A pesar de la mala la práctica, la mayoría de los navegadores (incluyendo IE) es compatible con las URL de hasta alrededor de 2000 caracteres, mientras que Apache tiene un valor predeterminado de 8000.

Para añadir soporte para largas parámetros con suhosin, añadir suhosin.get.max_value_length = <limit> en php.ini

Fuente: http://www.php.net/manual/en/reserved.variables.get.php#101469

+1

¡Funciona, gracias! – alexfernandez

+1

oooch, me picaron algunos datos importantes. Gracias, esto solucionó mi problema. – artfulrobot

+0

Podría abrazarte. El parámetro de consulta '' cripta' 'de más de 800+ caracteres devuelto por Sage Pay usando la integración de Formulario simplemente no fue recibido por nuestro manejador de checkout_process, lo que lo llevó a presentar el mensaje poco útil" ¡No se pudo autorizar la tarjeta! ". FYI encontré agregar '' php_value suhosin.get.max_value_length 2000'' a .htaccess no funcionó, tuve que agregar '' suhosin.get.max_value_length = 2000'' a la sección '' [suhosin] '' de php. ini (y reiniciar httpd) para que el cambio surta efecto. De repente, mi parametro largo de consulta crypt se recibe, procesa y los pagos con tarjeta vuelven a funcionar. – Neek

0

Ver What is the maximum length of a URL in different browsers?

La longitud de la URL no puede ser cambiado en PHP. La pregunta vinculada es sobre el límite de tamaño de URL, encontrará lo que desea.

+0

La URL está bien, y la cadena de consulta tiene todo. Es solo este parámetro (más de 512 caracteres) que no aparece en _GET. – alexfernandez

+0

@alexinblue Quizás el valor de esta variable tenga algunos símbolos especiales. ¿Usas 'urlencode()' para el valor? – Karolis

+0

@Geoffroy como dije, estoy usando REST: una solicitud GET es bastante conveniente y no estoy dispuesto a cambiarla. El artículo vinculado habla sobre un límite práctico de aproximadamente 2000 - 4000 caracteres en IE8; los navegadores antiguos no son un problema. – alexfernandez

Cuestiones relacionadas