PHP ile sıkıştırılmış dosyaları sunucu üzerinde açma (All archive extractor)

PHP Script
Ö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.

Facebook Yorumları

14 Yorum

  1. Mustinet

    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 🙂

  2. 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.

  3. 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.

  4. ökkeş

    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

  5. Caner
    Yazar

    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.

  6. Ahmet Uğur

    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 .

  7. salih

    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

Uyarı: Yorumlarda link kullanmayınız. Link içeren yorumlar otomatik olarak spam kabul edilmektedir.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir