PHP Classes

File: EasyArchive.class.php

Recommend this page to a friend!
  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: 15 years ago
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, $name, false);
       
header("Content-Length: ".strlen($data));
        print(
$data);
    }
    function
make ($src, $name="Archive.tgz", $returnFile=true)
    {
       
$ext = '.'.pathinfo ($name, PATHINFO_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)>1 || 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 ($src, PATHINFO_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']*100, 1) : false;
        }
        elseif (
strlen($comp)>1)
        {
           
$tar = new tar;
            if (
$comp == 'bz')
            {
               
$bzip2 = new bzip2;
               
$result = $bzip2->infosBzip2($src, true);
               
$src=$result['Data'];
            }
            elseif (
$comp == 'gz')
            {
               
$gzip = new gzip;
               
$result = $gzip->infosGzip($src, true);
               
$src=$result['Data'];
            }
            if (
$tar->is_tar($src) || is_file($src))
            {
               
$tarresult = $tar->infosTar($src, false);
               
$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']*100, 1) : 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;
    }
}
?>