Pregunta

Tengo una aplicación que estoy escribiendo en PHP5, usando el marco CodeIgniter. Lo tengo ejecutándose tanto en Windows (usando Xampp) como en Ubuntu (usando la pila estándar de Apache, PHP, MySQL).

Tengo un formulario que toma XML, lo analiza (usando simpleXML) y publica los resultados en una base de datos.

En Windows: no hay problema, funciona según lo previsto.

En Linux: gran problema. Se equivoca.

He verificado dos veces el XML, y está bien.

Eliminé una gran cantidad de XML, y parece que está bien.

Creo que está relacionado con el tamaño de la cadena XML que se publica desde el formulario, pero no estoy seguro. De nuevo, en Windows está bien, en Linux, se equivoca.

El tamaño de los datos publicados en el formulario es de ~ 160k (sí, es mucho texto, pero está automatizado, y eventualmente será de unos 200k).

El error está debajo.

Cualquier ayuda muy apreciada.

  

Error grave: excepción no detectada 'Excepción' con el mensaje 'La cadena no se pudo analizar como XML' en /var/www/ci/system/application/controllers/system.php:49 Seguimiento de pila: # 0 / var / www /ci/system/application/controllers/system.php(49): SimpleXMLElement- > __ construct ('') # 1 [función interna]: System- > add_system () # 2 / var / www / ci / system / codeigniter / CodeIgniter.php (233): call_user_func_array (Array, Array) # 3 /var/www/ci/index.php(115): require_once ('/ var / www / ci / sys ...') # 4 { main} lanzado en /var/www/ci/system/application/controllers/system.php en la línea 49

La línea 49 se ve así:

$ xml = new SimpleXMLElement ($ this- > input- > post ('form_systemXML'));

EDITAR - FIJO

Encontró el problema. Suhosin está instalado en Ubuntu. en el archivo /etc/php5/apache2/conf.d/suhosin.ini, habilité la línea suhosin.post.max_value_length = 65000 y cambié el valor a 195000. Apache reiniciado, y todo bien. Gracias por los punteros chicos.

¿Fue útil?

Solución

Parece que está ejecutando la extensión Suhosin PHP. Consulte la documentación de configuración en: http: //www.hardened-php. net / suhosin / configuration.html .

La opción relevante parece ser (nunca he usado la extensión Suhosin): suhosin.post.max_value_length y / o suhosin.request.max_value_length

Otros consejos

Compruebe su configuración de PHP en el cuadro de Linux y compárelo con la configuración de Windows. Especialmente la siguiente configuración:

  • memory_limit
  • post_max_size
  • magic_quotes_gpc
  • max_input_time

Quizás pueda hacer un volcado de los datos publicados en el script

print_r(

Compruebe su configuración de PHP en el cuadro de Linux y compárelo con la configuración de Windows. Especialmente la siguiente configuración:

  • memory_limit
  • post_max_size
  • magic_quotes_gpc
  • max_input_time

Quizás pueda hacer un volcado de los datos publicados en el script

<*>

para ver qué datos realmente ingresan al servidor.

POST);

para ver qué datos realmente ingresan al servidor.

Es posible que ya haya probado este enfoque, pero ¿verificó los finales de línea? \ r \ n (DOS) en lugar de \ n (UNIX)? Puede ser que las expresiones regulares que usa simpleXML puedan confundirse en diferentes plataformas ...

Actualización: encontré esto en syslog

4 de noviembre 21:53:32 ubu804 suhosin [7944]: ALERTA - límite de longitud del valor de variable de solicitud configurado excedido - variable eliminada 'form_systemXML' (atacante '127.0.0.1', archivo '/ var / www / ci / index. php ')

Estoy mirando la configuración de apache, ahora.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top