Önceki yazılarımızda sıkıştırılmış bir dosyanın php exec yardımıyla sunucu üzerinde nasıl kolayca açılabileceğinden bahsetmiştik. Peki ya servis sağlayıcı güvenlik önlemi olarak exec fonksiyonunu devre dışı bıraktıysa veya sunucu üzerinde açılmak istenilen dosya .zip‘ten hariç farklı bir uzantıya sahipse (.tar, .tar.gz vb) ne yapmalı? İşte All Archive Extractor isimli güzide class tam da bu noktada imdadımıza yetişiyor. İsminden de anlaşılabileceği üzere bilinen tüm sıkıştırma formatlarını destekliyor ve sunucu üzerindeki hemen hiç bir kısıtlama çalışmasına engel teşkil etmiyor.
index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <?php /** This script will show how to extract all sort of Archive (Tar, Gzip, Zip) etc.. */ require 'ArchiveExtractor.class.php'; /* Init. ArchiveExtractor Object */ $archExtractor=new ArchiveExtractor(); /* Extract */ // -Archive -Path $extractedFileList=$archExtractor->extractArchive("/dosya/yolu/dosya.tar.gz","/dosya/yolu/acilacak/klasor/"); ?> <pre> <?php print_r($extractedFileList); ?></pre> |
“/dosya/yolu/dosya.tar.gz” ile ifade edilen yere arşiv dosyanızın bulunduğu dizini, “/dosya/yolu/acilacak/klasor/” bölümüne ise arşivin extract edileceği (açılacağı) klasörün tam yolunu belirtmelisiniz.
ArchiveExtractor.class.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | <?php class ArchiveExtractor { /** Extract Archive(TarGzip, Zip) based on file suffix @param string Archive file @param string extraction path @return array */ function extractArchive($archFile, $extractPath=".") { echo "ARCH: ".$archFile."<br />ExtPath: $extractPath"; $result=""; if(eregi("tar|gz|tar.gz|tgz",$archFile)) { $result=$this->extractTarGzip($archFile,$extractPath); } else if(eregi("zip",$archFile)) { $result=$this->extractZip($archFile,$extractPath); } /* Return result */ return $result; } /** TarGzip file extractor function @param string Archive file @param string extraction path @return string */ function extractTarGzip($archFile, $extractPath=".") { /* include TAR library */ require_once 'pcltar.func.php'; /* extract and return list of extracted files */ return PclTarExtract($archFile,$extractPath); } /** Zip file extractor function @param string Archive file @param string extraction path @return array */ function extractZip($archFile, $extractPath=".") { /* include Zip Library file */ require 'pclzip.class.php'; /* Extract */ $zip=new PclZip($archFile); /* list of extracted files */ return $zip->extract($extractPath); } /** Get Tar/Gzip archive's file list @param string @return array */ function getTarGzipList($archFile) { /* include TAR library */ require_once 'pcltar.func.php'; /* return list */ return PclTarList($archFile); } /** Get Zip archive's file list @param string @return array */ function getZipList($archFile) { /* include Zip Library file */ require 'pclzip.class.php'; /* Extract */ $zip=new PclZip($archFile); /* return */ return $zip->listContent(); } } ?> |
Scriptin kullandığı (ve gerçekten uzun olan) kütüphaneler ile modülleri kolaylık olması açısından paketledim. Paket dosyasını buradan indirebilirsiniz.
Bu kullanışlı ve bir çok durumda can kurtaracak olması muhtemel script için Hossain Khan‘a teşekkür ediyoruz.
Paylaştığın dosyayı bilemeyeceğim ama hasan’ın adresini vermenden çok memnun oldum. Sitesinde çok yararlı ve hakikatli yazılar var. Bir yazıda “Microsoft programcıların yeteneklerini geliştirmeyi değil, herkesi programcı seviyesine terfi ettirir.” diye bir düşünceden bahsetmiş. Pek bir hoşuma gitti, galiba takipçisi olacağım :)
Paylaştığım dosyanın nesini bilemeyeceksin mübarek, gayet faydalı bir script işte ya :)
Hocam merhaba, 1 haftadır aradığım script burada buldum fakat bir sorum var.. Tüm dosyaları değil de ben sadece kullanıcının gönderdiği isimli dosyayı çıkartıp indirmeye olanak sağlamasını istiyorum. Bu mümkün müdür? Lütfen acil yanıt veriniz.. Teşekkür ederim.
Uğur dosyanın yüklendiği hostta cPanel var mı?
Evet hocam var.
Asıl sıkıntımı hemen açıklayım. JPEG ve TIFF uzantılı resimler var 50.000 adet ve bu resimler 3.5 GB açıkken 800 MB Zip’li iken. Sunucudan kâr etmek için bu sistemi istiyorum. Benim linki tıkladığım resmi versin istiyorum. Sunucuyu kasma meselesine gelirsek zaten çok hit olmayacak. Şirket personeli kullanacak. Bana bu sistem çok iyi olurdu ama tek tek tıkladığım linke ait resmin gelmesini istiyorum.
Uğur ben tek seferlik bir işlemden bahsediyorsun sanmıştım o yüzden cPanel’i sormuştum. Neyse bu istediğini şurda bahsedilen teknikleri kullanarak yapabilirsin sanırım: http://www.cyberciti.biz/faq/linux-unix-extracting-specific-files/
Yine de içimden bu kullanım biçiminin pek verimli olmayacağını söylemek geçiyor.
Çok teşekkür ederim, hemen ilgileneceğim. Zannediyorum bu işime yaramayacak yine de üzerinde uğraşayım.
Aslında tam olarak senin istediğin şeyden bahsediyorlar gibi bir incele istersen.
Tabi ki hocam inceliyorum. Bu arada sitenizi gezme fırsatı buldum çok beğendim hemen üyelik başvurusu yapıyorum :)
s.a. canercim biliyorum çok işin var ama sana bir soruda ben sorayım diğer konuda bahsettiğin script indirdim zip li dosyaları gayet güzel açıyor ama internette yaptığım ayrıntılı arama sonucu rar lı dosyaları açan bir script görmedim phpmanuel de var ama anlamadım senin bir bilgin var mı? benim rarlı dosyaları açmam lazım
Abi bu script rarlı dosyaları da açıyor diye biliyorum, denedin ve sonuç alamadın mı? Bir de eğer cPanel kullanıyorsan onun dosya yöneticisini kullanarak da rarlı dosyaları ayıklayabilirsin.
Merhabalar bunu kullandım gercekten güzel yapılmış fakat hatalara sahip, örneğin bir sayfa içinde 2 kere kullanamıyorsun yeniden tanımlasanda olmuyor bir türlü çözemedim o yüzden her işlemi farklı sayfa veya parametre ile yapmanız gerekiyor .
Kolay gelsin .
Gerçekten çok işime yaradı. Teşekkürler.
merhaba
anlatımınız için tesekur ederim.. acaba php sitem var. eklenen dosyaların otomatik olarak rardan cıkmasını, eger cıkarmayacaksam dahi arşiv yorumu eklenmesini istiyorum. php ile mumkun mu ?
zipli dosyalarda sorun olmuyor ama rar da sorun oluyor