Login   Register  
PHP Classes
elePHPant
Icontem

File: EasyArchive.class.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of alban.lopez  >  Easy Archives  >  EasyArchive.class.php  >  Download  
File: EasyArchive.class.php
Role: Class source
Content type: text/plain
Description: Archive Class
Class: Easy Archives
Manage tar, gzip, bzip2 and zip archives
Author: By
Last change: Bug correction
Date: 2008-04-27 03:46
Size: 5,499 bytes
 

Contents

Class file image Download
<?php
/**-------------------------------------------------
 | EasyArchive.class V0.8 -  by Alban LOPEZ
 | Copyright (c) 2007 Alban LOPEZ
 | Email bugs/suggestions to alban.lopez+eazyarchive@gmail.com
 +--------------------------------------------------
 | This file is part of EasyArchive.class V0.9.
 | EasyArchive is free software: you can redistribute it and/or modify
 | it under the terms of the GNU General Public License as published by
 | the Free Software Foundation, either version 3 of the License, or
 | (at your option) any later version.
 | EasyArchive is distributed in the hope that it will be useful,
 | but WITHOUT ANY WARRANTY; without even the implied warranty of
 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 | See the GNU General Public License for more details on http://www.gnu.org/licenses/
 +-------------------------------------------------- **/
//www.phpclasses.org/browse/package/4239.html

    
require (dirname(__FILE__).'/EasyZip.class.php');
    require (
dirname(__FILE__).'/EasyTar.class.php');
    require (
dirname(__FILE__).'/EasyGzip.class.php');
    require (
dirname(__FILE__).'/EasyBzip2.class.php');

/**
// You can use this class like that.
$arch = new archive;
$arch->make('./', './archive.tar.gzip');
var_export($arch->infos('./toto.bzip2'));
$arch->extract('./toto.zip', './my_dir/');
$arch->download('./my_dir/');
**/

class archive
{
    var 
$WathArchive = array (
        
'.zip'        =>'zip',
        
'.tar'        =>'tar',
        
'.gz'        =>'gz',
        
'.gzip'        =>'gz',
        
'.bzip'        =>'bz',
        
'.bz'        =>'bz',
        
'.bzip2'    =>'bz',
        
'.bz2'        =>'bz',
        
'.tgz'        =>'gz',
        
'.tgzip'    =>'gz',
        
'.tbzip'    =>'bz',
        
'.tbz'        =>'bz',
        
'.tbzip2'    =>'bz',
        
'.tbz2'        =>'bz',
    );
    function 
download ($src$name)
    {
        
header('Content-Type: application/force-download');
        
header("Content-Transfer-Encoding: binary");
        
header("Cache-Control: no-cache, must-revalidate, max-age=60");
        
header("Expires: Sat, 01 Jan 2000 12:00:00 GMT");
        
header('Content-Disposition: attachment;filename="'.$name."\"\n");
        
$data $this->make($src$namefalse);
        
header("Content-Length: ".strlen($data));
        print(
$data);
    }
    function 
make ($src$name="Archive.tgz"$returnFile=true)
    {
        
$ext '.'.pathinfo ($namePATHINFO_EXTENSION);
        foreach (
$this->WathArchive as $key=>$val)
            if (
stripos($ext$key)!==false$comp=$val;
        if (
$comp == 'zip')
        {
            
$zip = new zip;
            if (
$returnFile)
                
$result $zip->makeZip($src$dest);
            else
            {
                
$tmpZip './'.md5(serialize($src)).'.zip';
                
$result $zip->makeZip($src$tmpZip);
                
$result file_get_contents($tmpZip);
                
unlink($tmpZip);
            }
            return 
$result;
        }
        elseif (
strlen($comp)>1)
        {
            if (
count($src)>|| is_dir($src[0]) || $comp == 'tar')
            {
                
$tar = new tar;
                
$src $tar->makeTar($src);
            }
            if (
$comp == 'bz')
            {
                
$bzip2 = new bzip2;
                
$src $bzip2->makeBzip2($src);
            }
            elseif (
$comp == 'gz')
            {
                
$gzip = new gzip;
                
$src $gzip->makeGzip($src);
            }
            if (
$returnFile)
            {
                
file_put_contents($dest$src);
                return 
$dest;
            }
            return 
$src;
        }
        else return 
'Specifie a valid format at the end of '.$name.' filename ! ';
    }
    function 
infos ($src$data=false)
    {
        
$ext '.'.pathinfo ($srcPATHINFO_EXTENSION);
        foreach (
$this->WathArchive as $key=>$val)
            if (
stripos($ext$key)!==false$comp=$val;
        if (
$comp == 'zip')
        {
            
$zip = new zip;
            
$zipresult $zip->infosZip($src$data);
            
$result ['Items'] = count($zipresult);
            foreach(
$zipresult as $key=>$val)
                
$result['UnCompSize'] += $zipresult[$key]['UnCompSize'];
            
$result['Size']=filesize($src);
            
$result['Ratio'] = $result['UnCompSize'] ? round(100 $result['Size'] / $result['UnCompSize']*1001) : false;
        }
        elseif (
strlen($comp)>1)
        {
            
$tar = new tar;
            if (
$comp == 'bz')
            {
                
$bzip2 = new bzip2;
                
$result $bzip2->infosBzip2($srctrue);
                
$src=$result['Data'];
            }
            elseif (
$comp == 'gz')
            {
                
$gzip = new gzip;
                
$result $gzip->infosGzip($srctrue);
                
$src=$result['Data'];
            }
            if (
$tar->is_tar($src) || is_file($src))
            {
                
$tarresult $tar->infosTar($srcfalse);
                
$result ['Items'] = count($tarresult);
                
$result ['UnCompSize'] = 0;
                if (empty(
$result['Size']))
                    
$result['Size']=is_file($src)?filesize($src):strlen($src);
                foreach(
$tarresult as $key=>$val)
                    
$result['UnCompSize'] += $tarresult[$key]['size'];
                
$result['Ratio'] = $result['UnCompSize'] ? round(100 $result['Size'] / $result['UnCompSize']*1001) : false;
                
            }
            if (!
$data) unset($result['Data']);
        }
        else return 
false;
        return array(
'Items'=>$result['Items'], 'UnCompSize'=>$result['UnCompSize'], 'Size'=>$result['Size'], 'Ratio'=>$result['Ratio'],);
    }
    function 
extract ($src$dest=false)
    {
        
$path_parts pathinfo ($src);
        if (!
$dest)
            
$dest $path_parts['dirname'].'/';
        
$ext '.'.$path_parts['extension'];
        
$name $path_parts['filename'];
        foreach (
$this->WathArchive as $key=>$val)
            if (
stripos($ext$key)!==false$comp=$val;
        if (
$comp == 'zip')
        {
            
$zip = new zip;
            return 
$zip->extractZip($src$dest);
        }
        elseif (
strlen($comp)>1)
        {
            
$tar = new tar;
            if (
$comp == 'bz')
            {
                
$bzip2 = new bzip2;
                
$src $bzip2->extractBzip2($src);
            }
            elseif (
$comp == 'gz')
            {
                
$gzip = new gzip;
                
$src $gzip->extractGzip($src);
            }
            if (
$tar->is_tar($src) || is_file($src))
            {
                return 
$tar->extractTar($src$dest);
            }
            else 
file_put_contents($dest.$name$src);
            return 
$dest;
        }
        return 
false;
    }
}
?>