2010-01-10 21 views
16

Piszę małą stronę analityczną, która pomoże mi znaleźć błędy w aplikacji. Zasadniczo pozwala to wizualnie porównać faktyczne dane i wpisy do dziennika, a także przeprowadzić nieco analizę danych.Jak skompresować JSON z PHP?

Ponieważ jest to tylko do debugowania i ponieważ będę wdrażanie tego w witrynie na żywo chcę go mieć tak mało obciążenia serwera, jak to możliwe. Kilka opcji analizy będzie zawierać raczej ciężkie wyszukiwanie podłańcuchowe lub operacje, więc zamierzam to odciążyć klientowi.

Oznacza to, że strona PHP pobiera dane z tabel i dzienników, JSON część z nich i zapisuje. Klient JavaScript następnie wykona całą analizę, itd.

Problem polega na tym, że dane JSON będą miały kilka MB, a moje połączenie z serwerem będzie wolne. Byłoby miło jakoś skompresować dane. Ktoś ma pomysły?

Środowisko to PHP + Apache; Nie wiem, czy mod_gzip zostanie zainstalowany; i nie mam nad tym kontroli.

Odpowiedz

42

Można skompresować dane za pomocą PHP’s output control. Wystarczy umieścić ten apel na początku skryptu przed każdym wyjściem:

ob_start('ob_gzhandler'); 

Teraz każdy wyjście zostanie ściśnięta albo gzip lub korekta po zaakceptowaniu przez klienta.

+0

Naprawiono o_start na ob_start. –

+1

Działa! Brawo! :) –

+2

+1 - zdecydowanie droga. Zauważ jednak, że PHP musi być skonfigurowane z opcją --with-zlib, aby działało http://us2.php.net/manual/en/zlib.installation.php –

2

W PHP 5.4 jest teraz JSON_UNESCAPED_UNICODE więc można zastąpić char:

\ u00f3 -> L> = S

EQ:

json_encode($data,JSON_UNESCAPED_UNICODE); 
0

Jeśli Apache jest twój wybór (i to jest , jak wspomniano w pytaniu oryginalnym), możesz dodać pewne reguły do ​​.htaccess:

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