2008-10-23 18 views
5

PHP 4.4 y PHP 5.2.3 en Apache 2.2.4 en ubuntu.¿Por qué _POST a veces está vacío cuando se publica un área de texto en PHP

Ejecuto Moodle 1.5.3 y recientemente tuve un problema al actualizar un curso. La variable $ _POST está vacía, pero solo si se ingresó una gran cantidad de texto en el área de texto en el formulario. Si solo se ingresa un texto corto, funciona bien.

He aumentado el valor de post_max_size de 8M a 200M y he aumentado el límite de memoria a 256M pero esto no ha ayudado. He duplicado LimitRequestFieldSize y LimitRequestLine a 16380 y configuré LimitRequestBody en 0 sin ninguna mejora.

He buscado una respuesta en Google pero no he podido encontrarla.

HTTP Headers en firefox muestra el tamaño del contenido de 3816 con los datos correctos, por lo que simplemente no llega a $ _POST.

El sistema funcionaba bien hasta hace unas pocas semanas. El único cambio fue en/etc/hosts para corregir un problema de HELO con el servidor de correo electrónico exim4.

Puedo replicar el problema en una máquina de desarrollo que tiene exim4 no ejecutándose, así que creo que es solo una coincidencia.

Gracias por su ayuda.

+0

Bizarre. ¿Has identificado el umbral exacto? Los detalles podrían ser útiles para aquellos que desean reproducir el problema. –

+0

dijiste que no hay problemas con pequeñas cantidades de texto: ¿has podido encontrar el límite aproximado? – nickf

+0

Esto puede ser obvio, pero ¿ha verificado que el formulario sí utiliza POST y no GET? – troelskn

Respuesta

1

¿No podría ser el tamaño relacionado con la publicación, pero cuánto tiempo es la línea antes de una nueva línea. Si usan la vista WYSIWYG de Moodle, el html se colocará en una línea sin interrupciones. Si ingresas a html y presionas return cada 1000 caracteres, ¿funciona?

0

Parece un problema de integración de Apache o Apache/PHP. Si $ _POST está vacío, daría a entender que el servidor http no está dando la información POST a PHP. Si yo fuera tú, investigaría la configuración de Apache.

+0

HTTP Live Headers (una extensión de Firefox) muestra el contenido POST correctamente. – Puzzled

0

Esto es obvio, pero ¿reinició /etc/init.d/apache2?

Además, el archivo error_log debería mostrar cierta información sobre si el tamaño de la publicación excedió el límite establecido. Considere aumentar su nivel de detalle para solucionar el problema

1

¿Cuál es el tipo de formulario? Podría ser que limita la cantidad de datos enviados a través del formulario.

También puede ser que desee comprobar los datos en bruto entrantes $ _POST con:

file_get_contents('php://input'); 

Para asegurarse de que su realidad es de envío de datos. Tiene estas sugerencias here.

+0

también está vacío – Puzzled

2

No sé lo suficiente como para realmente proporcionar una respuesta útil, por lo que la siguiente es una suposición más bien educada (al menos eso espero).

En primer lugar, debe depurar la solicitud completa, ya sea por access_log o, por ejemplo, a través de firebug. (Es bueno tener Firebug de todos modos.) Para mí, tu problema suena como como si hubiera un redireccionamiento en el medio.Os pongo un ejemplo:

asumir esta es su estructura:

/form.php 
/directory/index.php 

Ésta es su forma:

<form action="/directory" method="post"> 
... 
</form> 

problema en este caso es, que a pesar de /directory es una URL válida, Apache te redirigirá una vez más al /directory/, por lo que estás perdiendo tu carga útil (lo que se supone que está en $_POST).

Cuestiones relacionadas