में बड़ी फ़ाइलों के लिए टुकड़े टुकड़े bzcompression PHP में bzip2 संग्रहीत डेटा बनाना bzcompress में इसके कार्यान्वयन के लिए बहुत आसान है। मेरे वर्तमान एप्लिकेशन में मैं सभी कारणों से केवल इनपुट फ़ाइल को स्ट्रिंग में नहीं पढ़ सकता और फिर bzcompress
या bzwrite
पर कॉल कर सकता हूं। PHP दस्तावेज़ीकरण यह स्पष्ट नहीं करता है कि डेटा की अपेक्षाकृत कम मात्रा के साथ bzwrite
पर लगातार कॉल के परिणामस्वरूप एक ही परिणाम मिलेगा जब पूरी फ़ाइल को एक एकल झुकाव में संपीड़ित किया जाएगा। मैंPHP
function makeBZFile($infile,$outfile)
{
$fp = fopen($infile,'r');
$bz = bzopen($outfile,'w');
while (!feof($fp))
{
$bytes = fread($fp,10240);
bzwrite($bz,$bytes);
}
bzclose($bz);
fclose($fp);
}
function unmakeBZFile($infile,$outfile)
{
$bz = bzopen($infile,'r');
while (!feof($bz))
{
$str = bzread($bz,10240);
file_put_contents($outfile,$str,FILE_APPEND);
}
}
set_time_limit(1200);
makeBZFile('/tmp/test.rnd','/tmp/test.bz');
unmakeBZFile('/tmp/test.bz','/tmp/btest.rnd');
नीचे दिखाया गया
$data = file_get_contents('/path/to/bigfile');
$cdata = bzcompress($data);
मैं एक टुकड़ों bzcompression दिनचर्या का उपयोग कर बाहर की कोशिश की, की तर्ज पर कुछ इस कोड को मैंने किया था परीक्षण करने के लिए इसका मतलब यह दो बातें
- मैं
makeBZFile
का इस्तेमाल किया और संकुचित करने के लिएunmakeBZFile
और उसके बाद SQLite डेटाबेस को डिकंप्रेस करें - जो मुझे अंततः करने की आवश्यकता है। - मैं एक 50Mb यादृच्छिक डेटा
dd if=/dev/urandom of='/tmp.test.rnd bs=50M count=1
दोनों ही मामलों मैं एक diff original.file decompressed.file
प्रदर्शन किया और पाया कि दो समान थे से भरा बनाया।
सभी बहुत अच्छे हैं लेकिन यह मुझे स्पष्ट नहीं है कि यह क्यों काम कर रहा है। PHP दस्तावेज़ बताते हैं कि bzread(bzpointer,length)
UNCOMPRESSED डेटा के अधिकतम length
बाइट्स को पढ़ता है। यदि नीचे मेरा कोड खराब है तो यह इसलिए है क्योंकि मैं bzwite
और bzread
आकार 10240 बाइट्स को मजबूर कर रहा हूं।
क्या मैं नहीं देख सकता bzread
कितना जानता है असम्पीडित डेटा की lenth
बाइट्स लाने के लिए कैसे है। मैंने format of a bzip2 file की जांच की। मैं नहीं देख सकता कि वहाँ कुछ भी है जो .bz फ़ाइल के एक हिस्से के लिए असम्पीडित डेटा लंबाई को आसानी से स्थापित करने में मदद करता है।
मुझे संदेह है कि यह कैसे काम करता है इसकी मेरी समझ में एक अंतर है - या फिर तथ्य यह है कि नीचे मेरा कोड सही टुकड़े टुकड़े संपीड़न करने के लिए प्रतीत होता है पूरी तरह आकस्मिक है।
मैं यहां कुछ स्पष्टीकरणों की सराहना करता हूं।
जवाब के लिए धन्यवाद। आपने देखा होगा कि मेरे प्रश्न में मैं बीजेआईपी फ़ाइल प्रारूप का एक लिंक प्रदान करता हूं जिसे मैंने प्रश्न प्रस्तुत करने से पहले अध्ययन किया था। आपका उत्तर यह समझने में सहायता करता है कि 'bzwrite' डेटा टुकड़े टुकड़े कैसे लिखता है। यह मुझे स्पष्ट नहीं है कि 'bzread' निर्दिष्ट संख्या * असंपीड़ित * बाइट्स को पढ़ने के लिए कैसे प्रबंधित करता है। यह देखते हुए कि प्रत्येक ब्लॉक में डेटा के आधार पर संपीड़न की डिग्री अलग-अलग होगी, यह सोचने के रूप में सरल नहीं है "* वह असम्पीडित डेटा के एक्स बाइट चाहता है तो मुझे अगले एक्स/असम्पीडित_इज ब्लॉक को लाएं" – DroidOS
यह सीधे जैकेट नहीं है असंपीड़न बाइट्स में बाइट पढ़ने के लिए सूत्र। सबसे पहले हफमैन पेड़ को समझा जाता है और पेड़ के अनुसार संपीड़न डेटा असंपीड़ित होता है। – Vineet1982
आपको और कुछ और जानना है बस मुझे बताएं या जवाब स्वीकार करें – Vineet1982