यह कुछ ऐसा है अप this और this और जैसे विभिन्न कारणों के लिए (से पहले आ गया है है:
यहाँ जिप बम के बारे में कुछ लिंक है the one with broken links in the answer)।
आम तौर पर इस समय प्रचलित राय एक आवरण (या तो DIY या a library का उपयोग करें) बनाने के लिए जो एक 7 जिप बाइनरी (निष्पादन) सर्वर पर सुलभ हो और exec()
का उपयोग कर द्विआधारी के लिए कॉल रैप करने के लिए होने पर निर्भर करता है, एक शुद्ध PHP समाधान के बजाय।
7zip format supports a variety of compression algorithms के बाद से, मुझे लगता है कि आप शायद LZMA प्रारूप को पढ़ने/डिकंप्रेस करने का शुद्ध PHP कार्यान्वयन चाहते हैं। जबकि LZMA SDKs available for C, C++, C# and Java हैं और किसी ने PHP Extension for LZMA2 (और fork for LZMA) बना दिया है, भले ही यहां तक कि थोड़ी देर के लिए on the 7-zip forums ब्याज भी है, लेकिन किसी ने इसे एक व्यापक पीईसीएल एक्सटेंशन या शुद्ध PHP के रूप में अभी तक बंद नहीं किया है।
अपनी आवश्यकताओं & प्रेरणा के आधार पर यह आप के साथ छोड़ देता है:
- अपने सर्वर पर 7-ज़िप द्विआधारी जोड़ने के लिए, और एक आवरण पुस्तकालय का उपयोग करें, यह अपनी खुद की है या someone else's
- स्थापित करने और उपयोग एक अनौपचारिक PECL extension
- बहादुरी बंदरगाह LZMA एसडीके खुद के PHP के लिए (और उम्मीद है कि इसे वापस योगदान स्रोत को खोलने के लिए!)
अन्य प्रारूपों के लिए आप उदाहरण के लिए पीएचपी दस्तावेज और उपयोग के विवरणों के लिए देख सकते हैं:
चूंकि इनमें से सभी में पीईसीएल एक्सटेंशन शामिल हैं, यदि आप किसी भी तरह से अपने वेबहोस्ट द्वारा सीमित हैं और इसके लिए शुद्ध PHP समाधान की आवश्यकता है, तो बस एक और अधिक सक्षम वेबहोस्ट में स्थानांतरित करना आसान हो सकता है।
रूप this answer ने सुझाव दिया जिप बम के खिलाफ की रक्षा करने का प्रयास करने के लिए, आप संपीड़न अनुपात देख सकते हैं (पैक आकार पैक आकार से विभाजित और अमान्य के रूप में एक निश्चित सीमा से अधिक कुछ भी इलाज), हालांकि जिप बम answer to one of the linked questions के बारे में बात करेंगे इंगित करें कि यह बहु-स्तरित ज़िप बम के खिलाफ अप्रभावी हो सकता है। उन लोगों के लिए आपको यह देखने की आवश्यकता होगी कि आपके द्वारा सूचीबद्ध फाइलें संग्रहित हैं या नहीं, यह सुनिश्चित करना कि आप किसी भी तरह का रिकर्सिव निष्कर्षण नहीं कर रहे हैं और फिर उन अभिलेखागारों का इलाज करें जिनमें अभिलेखागार अमान्य हैं।
पूर्णता के लिए
, सरकारी PECL एक्सटेंशन के कुछ उपयोग के उदाहरण:
RAR:
<?php
// open the archive file
$archive = RarArchive::open('archive.rar');
// make sure it's valid
if ($archive === false) return;
// retrieve a list of entries in the archive
$entries = $archive->getEntries();
// make sure the entry list is valid
if ($entries === false) return;
// example output of entry count
echo "Found ".count($entries)." entries.\n";
// loop over entries
foreach ($entries as $e) {
echo $e->getName()."\n";
}
// close the archive file
$archive->close();
?>
टीएआर:
<?php
// open the archive file
try {
$archive = new PharData('archive.tar');
}
// make sure it's valid
catch (UnexpectedValueException $e) {
return;
}
// make sure the entry list is valid
if ($archive->count() === 0) return;
// example output of entry count
echo "Found ".$archive->count()." entries.\n";
// loop over entries (PharData is already a list of entries in the archive)
foreach ($archive as $entry) {
echo $entry."\n";
}
// no need to close a PharData
?>
ज़िप (ओ पी के सवाल से अनुकूलित जो here से है):
<?php
// open the archive file
$archive = new ZipArchive;
$valid = $archive->open('archive.zip');
// make sure it's valid (if not ZipArchive::open() returns various error codes)
if ($valid !== true) return;
// make sure the entry list is valid
if ($archive->numFiles === 0) return;
// example output of entry count
echo "Found ".$archive->numFiles." entries.\n";
// loop over entries
for ($i = 0; $i < $archive->numFiles; $i++) {
$e = $archive->statIndex($i);
echo $e['name']."\n";
}
// close the archive file (redundant as called automatically at the end of the script)
$archive->close();
?>
जीजेड:
चूंकि gz (gnu zlib) एक संग्रह प्रारूप की बजाय संपीड़न तंत्र है, यह PHP में भिन्न है। यदि आप .gz
फ़ाइल को स्वयं 0 (.tar
की तरह व्यवहार करने के बजाय) gzopen()
के साथ खोलते हैं, तो इसके किसी भी पाठ को पारदर्शी रूप से डिकंप्रेस किया जाता है। चूंकि यह आमतौर पर .tar.gz
है, इसलिए आप इसे .tar
जैसे उपरोक्त के रूप में देख सकते हैं (this answer on another question भी देखें)। या आप के साथ this answer on another question में टैर निकालें।
यह एक बाहरी कार्यक्रम के 'सूची' उत्पादन पर कब्जा करने के लिए एक विकल्प होगा जैसे [7z] (http://linux.die.net/man/1/7z) ? (लिनक्स मानते हैं) – Arnauld
@ अर्ननाल्ड: उपयोगकर्ता द्वारा फ़ाइल अपलोड करने के बाद शायद ही किया जाना है। –
@ एमएम क्या यह स्वीकार करने के लिए मेरे उत्तर से कुछ याद आ रही है, या आप एक ऐसे उत्तर की प्रतीक्षा कर रहे हैं जिसमें शुद्ध PHP LZMA कार्यान्वयन शामिल है? – Leith