it-swarm-es.com

¿Cómo puedo tener un cuerpo con más de 64 Kb de datos en él?

Me di cuenta de que cuando creo un nodo con demasiados datos en el campo del cuerpo, las ediciones posteriores no se guardarán. O más bien, el guardado continúa y vuelvo a ver el nodo, pero el contenido no ha cambiado.

Después de una extensa prueba y error, pude determinar que cualquier guardado que tuviera una longitud de cuerpo de menos de 64 Kb guardó bien, pero cualquier cosa más que eso no se salvaría.

¿Cuál es la causa de esto y hay alguna forma de evitarlo?

3
Rimu Atkinson

El motivo del problema es una expresión regular que hace que PCRE alcance el límite establecido para pcre.backtrack_limit o pcre.recursion_limit.
Hubo un informe de problemas en drupal.org sobre el contenido del cuerpo truncado; la longitud del texto que se puede ingresar antes de que se trunque depende de los caracteres utilizados (el texto en inglés puede ser más largo que un texto que contiene todos los caracteres Unicode) y de los valores establecidos para pcre.backtrack_limit y pcre.recursion_limit.

El informe de problemas del que estoy hablando es Documentar posibles problemas de memoria preg . Gerhard Killesreiter El comentario es el siguiente:

Este problema [el contenido del cuerpo se trunca] se debe a los límites de las expresiones regulares de Perl que usamos para validar que ha publicado UTF8 válido.

Si aumenta los límites en su archivo settings.php, verá el texto.

ini_set('pcre.backtrack_limit', 200000);
ini_set('pcre.recursion_limit', 200000);

Deberá experimentar qué valores funcionan para usted.

node_schema () define el campo del cuerpo de la tabla node_revisions como "texto grande". Esto significa que con MySQL la longitud máxima de un cuerpo de nodo es 4 GB, y con PostgreSQL no hay (teóricamente) ningún límite; en ambos casos, el límite no es el 64 KB que está observando.

El archivo default.settings.php contiene el siguiente comentario:

/**
 * If you encounter a situation where users post a large amount of text, and
 * the result is stripped out upon viewing but can still be edited, Drupal's
 * output filter may not have sufficient memory to process it.  If you
 * experience this issue, you may wish to uncomment the following two lines
 * and increase the limits of these variables.  For more information, see
 * http://php.net/manual/en/pcre.configuration.php.
 */
# ini_set('pcre.backtrack_limit', 200000);
# ini_set('pcre.recursion_limit', 200000);
8
kiamlaluno

Para los sitios con Suhosin habilitado, es probable que este sea el límite predeterminado en POST value lenght.

suhosin.post.max_value_length=65000 Es el valor predeterminado de Suhosin (y puede que no esté en /etc/php5/conf.d/suhosin.ini Hasta que lo agregue).

Esta configuración será visible en la salida de phpinfo().

2
Chris Burgess

Algunas distribuciones incluyen parches que imponen límites adicionales a las solicitudes entrantes en nombre de la seguridad. He tenido problemas con los envíos de formularios web que contienen "demasiados" parámetros que se resolvieron aumentando el límite impuesto por el parche de seguridad que Debian incluye en PHP.

Es posible que desee buscar en su PHP y/o registros de errores del servidor HTTP y ver si puede encontrar alguna mención de solicitudes que sean demasiado largas, etc.

0
thsutton