2010-01-10 10 views
16

मैं थोड़ा विश्लेषण पृष्ठ लिख रहा हूं जो मुझे एप्लिकेशन में बग का शिकार करने में मदद करेगा। संक्षेप में यह वास्तविक डेटा और लॉग प्रविष्टियों की दृष्टि से तुलना करने की अनुमति देता है, साथ ही डेटा पर थोड़ा सा विश्लेषण भी करता है।PHP के साथ JSON को संपीड़ित कैसे करें?

चूंकि यह केवल डिबगिंग के लिए है और चूंकि मैं इसे लाइव साइट पर तैनात कर दूंगा, इसलिए मैं इसे जितना संभव हो उतना छोटा सर्वर लोड करना चाहता हूं। कई विश्लेषण विकल्पों में भारी भारी खोज या एन संचालन शामिल होंगे, इसलिए मैं इसे क्लाइंट को ऑफ़लोड करने जा रहा हूं।

इसका मतलब है कि PHP पृष्ठ केवल टेबल और लॉग से डेटा लेगा, इसमें से कुछ JSON, और इसे लिख लें। क्लाइंट जावास्क्रिप्ट तब सभी विश्लेषण आदि करेगा।

समस्या यह है कि JSON'ed डेटा कई एमबी बड़ा होगा, और सर्वर से मेरा कनेक्शन - धीमा। किसी भी तरह से डेटा को संपीड़ित करना अच्छा लगेगा। किसी के पास विचार हैं?

पर्यावरण PHP + अपाचे है; मुझे नहीं पता कि mod_gzip स्थापित किया जाएगा या नहीं; और मेरे पास इसका कोई नियंत्रण नहीं है।

उत्तर

42

आप PHP’s output control के साथ डेटा को संपीड़ित कर सकते हैं। बस किसी भी उत्पादन से पहले अपनी स्क्रिप्ट के शुरू में इस कॉल डाल:

ob_start('ob_gzhandler'); 

अब किसी भी उत्पादन या तो gzip के साथ संपीडित किया जाएगा या हवा निकालना अगर ग्राहक द्वारा स्वीकार कर लिया।

+0

ob_start पर निश्चित o_start। –

+1

यह काम करता है! हुर्रे! :) –

+2

+1 - निश्चित रूप से जाने का रास्ता। नोट, हालांकि, यह काम करने के लिए PHP को --with-zlib के साथ कॉन्फ़िगर किया जाना चाहिए http://us2.php.net/manual/en/zlib.installation.php –

2

पीएचपी 5.4 में अब JSON_UNESCAPED_UNICODE ताकि आप चार की जगह ले सकता है:

\ u00f3 -> एल> = S

eq:

json_encode($data,JSON_UNESCAPED_UNICODE); 
0

तो अपाचे अपनी पसंद (और यह है , जैसा कि मूल प्रश्न में उल्लिखित है), आप .htaccess में कुछ नियम जोड़ सकते हैं:

<IfModule mod_deflate.c> 
    AddOutputFilterByType DEFLATE text/html 
    # Add any mime-type you think is appropriate here 
    AddOutputFilterByType DEFLATE application/json 
</IfModule> 
संबंधित मुद्दे