2010-01-10 5 views
16

J'écris une petite page d'analyse qui va m'aider à traquer les bogues dans une application. En substance, il permet de comparer visuellement les données réelles et les entrées de journal, et d'effectuer un peu d'analyse sur les données.Comment compresser les fichiers JSON avec PHP?

Puisque ceci est pour le débogage seulement et puisque je déploierai ceci sur le site en direct je veux qu'il ait la charge de serveur aussi petite que possible. Plusieurs options d'analyse incluront une recherche de sous-chaîne plutôt lourde ou n opérations, donc je vais décharger cela au client.

Cela signifie que la page PHP va simplement prendre les données des tables et des journaux, JSON une partie, et l'écrire. Le client Javascript fera alors toute l'analyse etc.

Le problème est que les données JSON'ed seront de plusieurs Mo de large, et ma connexion au serveur - lente. Ce serait bien de compresser les données en quelque sorte. Quelqu'un a des idées?

L'environnement est PHP + Apache; Je ne sais pas si mod_gzip sera installé; et je n'ai aucun contrôle sur cela.

Répondre

42

Vous pouvez compresser les données avec PHP’s output control. Il suffit de mettre cet appel au début de votre script avant toute sortie:

ob_start('ob_gzhandler'); 

Maintenant, toute sortie sera comprimé soit gzip ou dégonfler si elle est acceptée par le client.

+0

Correction de o_start à ob_start. –

+1

Ça marche! Hourra! :) –

+2

+1 - définitivement le chemin à parcourir. Notez, cependant, que PHP doit être configuré avec --with-zlib pour que cela fonctionne http://us2.php.net/manual/fr/zlib.installation.php –

2

En PHP 5.4 est maintenant JSON_UNESCAPED_UNICODE de sorte que vous pouvez remplacer le caractère:

\ u00f3 -> Ĺ> = S

eq:

json_encode($data,JSON_UNESCAPED_UNICODE); 
0

Si apache est votre choix (et il est , comme mentionné dans la question d'origine), vous pouvez ajouter des règles dans .htaccess:

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