2010-01-10 73 views
16

Estoy escribiendo una pequeña página de análisis que me ayudará a buscar errores en una aplicación. En esencia, permite comparar visualmente datos reales y entradas de registro, además de realizar un poco de análisis sobre los datos.Cómo comprimir JSON con PHP?

Dado que esto es solo para la depuración y como voy a implementar esto en el sitio en vivo, quiero que tenga la menor carga de servidor posible. Varias de las opciones de análisis incluirán búsquedas de subcadenas bastante pesadas o n operaciones, por lo que voy a descargar esto al cliente.

Esto significa que la página PHP solo tomará los datos de las tablas y los registros, JSON en parte, y los escribirá. El cliente Javascript entonces hará todo el análisis, etc.

El problema es que los datos JSON serán varios MB de gran tamaño y mi conexión con el servidor, lenta. Sería bueno comprimir los datos de alguna manera. Alguien tiene ideas?

El entorno es PHP + Apache; No sé si se instalará mod_gzip; y no tengo control sobre eso.

Respuesta

42

Puede comprimir los datos con PHP’s output control. Sólo hay que poner esta llamada en el inicio de la secuencia de comandos antes de cualquier salida:

ob_start('ob_gzhandler'); 

Ahora cualquier salida será comprimida con gzip o bien o desinflar si es aceptada por el cliente.

+0

Se corrigió o_start en ob_start. –

+1

¡Funciona! ¡Hurra! :) –

+2

+1 - Definitivamente el camino a seguir. Sin embargo, tenga en cuenta que PHP debe configurarse con --with-zlib para que esto funcione http://us2.php.net/manual/en/zlib.installation.php –

2

En PHP 5.4 es ahora JSON_UNESCAPED_UNICODE para que pueda reemplazar Char:

\ u00f3 -> L> = S

eq:

json_encode($data,JSON_UNESCAPED_UNICODE); 
0

Si Apache es su elección (y es , como se menciona en la pregunta original), puede agregar algunas reglas en .htaccess:

<IfModule mod_deflate.c> 
    AddOutputFilterByType DEFLATE text/html 
    # Add any mime-type you think is appropriate here 
    AddOutputFilterByType DEFLATE application/json 
</IfModule>