PHP

2011-06-25 9 views
6

में भेजने से पहले एक JSON ऑब्जेक्ट ज़िप करें, मुझे किसी ऑब्जेक्ट से अनुरोध करने वाले मेरे मोबाइल डिवाइस पर ले जाने से पहले किसी सर्वर पर JSON ऑब्जेक्ट से टेक्स्ट आउटपुट ज़िप करने में दिलचस्पी है। Txt zipping का एक छोटा परीक्षण इसके आकार को लगभग 80% कम कर देगा! मोबाइल के लिए यह बहुत अच्छा है! :)PHP

मुझे वास्तव में सर्वर पर बनाई गई ज़िप फ़ाइल को सहेजने की ज़रूरत नहीं है, बस इसे स्मृति में रखें, फिर इसे गूंजें। मैं इसे एंड्रॉइड पक्ष पर कोई समस्या नहीं खोल सकता।

फिर भी, मैं एक छोटे से हेरफेर किया है, लेकिन मैं कुछ भी है कि काम करता है के साथ आने के लिए सक्षम नहीं किया गया है, यहाँ क्या मैं अब तक है:

while($e=mysql_fetch_assoc($q)) 
    $output[]=$e; 
$zip = new ZipArchive(); 
$zip->addFromString("test",(json_encode($output))); 
echo $zip; 

मैं जानता हूँ कि im शायद कुछ बड़े पैमाने पर गलत कर , मैं php से बहुत परिचित नहीं हूँ। मेरा $ q एक कर्सर है जिसमें बहुत सी एसक्यूएल पंक्तियां हैं, और यदि मैं सभी ज़िप शेंगेनियों के बजाय print(json_encode($output)); का उपयोग करता हूं तो यह कच्चे पाठ को आउटपुट करने के लिए ठीक काम करता है।

मुझे लगता है कि इसे ज़िप संपीड़न नहीं होना चाहिए, लेकिन अगर आप मुझे उचित दिशा में इंगित कर सकते हैं तो कोई संपीड़न सहायक होगा, मैं इसे समझ सकता हूं। धन्यवाद!

+2

यदि आप PHP डेटा को मानक gzip/deflate का उपयोग करने पर विचार करने के लिए वेबसर्वर का उपयोग कर रहे हैं। आगे ज़िपिंग इसे बहुत मदद नहीं करनी चाहिए। यदि आपका क्लाइंट-एंड अनजिप/डिफ्लेट कर सकता है जो लागू करने के लिए पर्याप्त और सरल होना चाहिए (क्योंकि आपको इसे लागू करने की आवश्यकता नहीं है)। – Kissaki

+1

+1 मेरे हितों से संबंधित प्रश्न। –

उत्तर

9

आप ob_gzhandler साथ ob_start उपयोग कर सकते हैं:

if(function_exists('ob_gzhandler')) ob_start('ob_gzhandler'); 
else ob_start(); 

echo json_encode($output); 
ob_end_flush(); 
+1

+1, अच्छा जवाब अच्छा सवाल है। @knittl क्या आप समझा सकते हैं कि ज़िप्ड/एन्कोडेड डेटा क्लाइंट-साइड पर जेसन को अनजिप/डीकोड किया जाएगा। –

+0

@ इम्राम: क्लाइंट (ब्राउज़र) स्वचालित रूप से डेटा को डिफ्लेट कर देंगे (संभवतः सही http शीर्षलेख भेजें, अगर यह बॉक्स से बाहर काम नहीं कर रहा है)। डीकोडिंग जेसन आवश्यक नहीं है, क्योंकि जेसन पहले से ही वैध जावास्क्रिप्ट कोड है। – knittl

+1

एंड्रॉइड की gzip http अनुरोध क्षमताओं के साथ बहुत बंदरगाह के बाद, मुझे यह काम मिल गया। मेरा सर्वर (और मेरे प्लेयर की डेटा योजना) धन्यवाद! – Eric

0

सर्वर साइड: एक JSON वस्तु है कि केवल एक संपत्ति एक बाइट सरणी है कि JSON ऑब्जेक्ट ज़िप किया गया है और ग्राहक के लिए भेज है कि समाहित हों। क्लाइंट साइड: मूल JSON डेटा प्राप्त करने के लिए ऑब्जेक्ट में निहित बाइट सरणी को अनजिप करें। प्रो: 5 एक्स सबसे तेज़ संचार सर्वर-क्लाइंट, सर्वर के लिए कम आईओ काम। सर्वर से अधिक CPU कार्य आवश्यक है। अपना विचार लें: पी

संबंधित मुद्दे