2012-12-14 11 views
6

मैं वर्तमान में अपने ढांचे के लिए एक विस्तार तंत्र के साथ प्रयोग कर रहा हूं। प्रत्येक मॉड्यूल में कम से कम एक PHP फ़ाइल (एक वर्ग को परिभाषित करना) और एक एक्सएसएल स्टाइलशीट होता है लेकिन संभावित रूप से कई अन्य फाइलें शामिल की जा सकती हैं, इसलिए मैंने तुरंत फ़ार का उपयोग करने के बारे में सोचा।न्यूनतम PHP फ़ार स्टब

सबकुछ अच्छी तरह से खेल रहा है लेकिन मैंने देखा कि अगर मैंने createDefaultStub() का उपयोग नहीं किया है और इसके बजाय फ़ार को निम्नलिखित स्निपेट में बनाया है तो परिणाम आकार का एक चौथाई हिस्सा है - और संपीड़ित संस्करण से छोटा है।

$phar = new Phar('Example.phar', 0, 'Example.phar'); 
$phar->buildFromDirectory(__DIR__ . '/src'); 
$phar->setStub('<?php __HALT_COMPILER();'); 
$phar->setSignatureAlgorithm(Phar::SHA256); 
$phar->compress(Phar::GZ); 

उदाहरण फ़ाइल आकार:

8799 14 Dec 09:37 ExampleCog.phar (using createDefaultStub()) 
2143 14 Dec 10:08 ExampleCog.phar (using __HALT_COMPILER()) 
3373 14 Dec 10:08 ExampleCog.phar.gz (consistent with either method) 

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

उत्तर

7

मुझे लगता है कि मेरा सवाल यह है कि, मुझे क्या याद आ रहा है - अगर कुछ भी - न्यूनतम स्टब कोड का उपयोग करने के साथ?

file format documentation में, डिफ़ॉल्ट ठूंठ के रूप में वर्णित है:

phar आधारित फर अभिलेखागार के लिए डिफ़ॉल्ट ठूंठ लगभग शामिल phar की सामग्री को निकालें और उन्हें अमल करने के लिए कोड की 7K।

यह तो Phar::createDefaultStub की ओर इशारा करता है, जो कहते हैं:

यह विधि एक ठूंठ कि phar संग्रह से एक स्टार्टअप फ़ाइल चलेंगे बनाने के लिए एक सरल और आसान तरीका प्रदान करता है। इसके अलावा, वेब सर्वर के माध्यम से कमांड लाइन बनाम फ़ार संग्रह चलाने के लिए अलग-अलग फ़ाइलों को निर्दिष्ट किया जा सकता है। लोडर स्टब भी फ़ार :: इंटरसेप्टफाइलफंक्स() को कॉल करता है ताकि फ़ाइल सिस्टम तक पहुंचने वाले PHP एप्लिकेशन के आसान बंडल की अनुमति मिल सके। यदि फ़ार एक्सटेंशन मौजूद नहीं है, तो लोडर स्टब फ़ार आर्काइव को अस्थायी निर्देशिका में निकाल देगा और फिर फ़ाइलों पर काम करेगा। एक शट डाउन फ़ंक्शन अस्थायी फ़ाइलों को बाहर निकलने पर मिटा देता है।

जोर जोड़ा गया, क्योंकि यही कारण है कि डिफ़ॉल्ट स्टब इतना बड़ा है। आप यह मान सकते हैं कि आप हमेशा बाद में पीएचपी 5.3 के तहत काम या जाएगा, तो आप शायद डिफ़ॉल्ट ठूंठ जरूरत नहीं और कम से कम __HALT_COMPILER

साथ छड़ी कर सकते हैं और क्यों संकुचित संस्करण हमेशा एक ही आकार है?

डाइविंग एक बार फ़ाइल प्रारूप दस्तावेज़ में फिर से, वहाँ एक comparison between archive formats जो बताते हैं कि फर करता है, दोनों प्रति-फ़ाइल और पूरे संग्रह संपीड़न। ऐसा लगता है कि आप समान संपीड़न आकार देख रहे हैं क्योंकि gzip डेटा को और भी संपीड़ित नहीं कर सकता है। यह अनुमान है।

+2

+1: बहुत उपयोगी और अच्छी तरह लिखा गया। –

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