?
Path : /home/admin/public_html/old/administrator/components/com_jckman/helpers/ |
Current File : /home/admin/public_html/old/administrator/components/com_jckman/helpers/archivefactory.php |
<?php /*------------------------------------------------------------------------ # Copyright (C) 2005-2012 WebxSolution Ltd. All Rights Reserved. # @license - GPLv2.0 # Author: WebxSolution Ltd # Websites: http://www.webxsolution.com # Terms of Use: An extension that is derived from the JoomlaCK editor will only be allowed under the following conditions: http://joomlackeditor.com/terms-of-use # ------------------------------------------------------------------------*/ defined( '_JEXEC' ) or die; class ArchiveFactory { private $phar = null; private $baseDir = ''; private $name = ''; private $archive = null; public function __construct($baseDir,$name) { $this->baseDir = $baseDir; $this->name = $name; } private function build() { if(class_exists('PharData')) $this->pharBuild(); else $this->zipBuild(); } private function pharBuild() { $this->type = $type = 'tar.gz'; $this->phar = new PharData($this->name.'.tar'); $this->phar->buildFromDirectory($this->baseDir); $this->phar->convertToData(Phar::TAR,Phar::GZ,'.'.$this->type); unset( $this->phar ); // remove any references to this file! unlink($this->name .'.tar'); $this->archive = file_get_contents($this->name.'.'.$this->type); unlink($this->name. '.'.$this->type); } private function zipBuild() { $this->type = $type = 'zip'; $zip = new ZipArchive(); // open archive $name = $this->name.'.zip'; if ($zip->open($name, ZIPARCHIVE::CREATE) !== TRUE) throw new Exception ("Could not open archive"); $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($this->baseDir,FilesystemIterator::SKIP_DOTS)); foreach ($iterator as $key=>$value) { $filterKey = str_replace($this->baseDir.'/','',$key); if(!$zip->addFile(realpath($key),$filterKey)) throw new Exception('ERROR: Could not add file: '.$filterKey); } $zip->close(); $this->archive = file_get_contents($name); unlink($name); } public function downloadFile() { $this->build(); switch ($this->type) { case "tar.gz": case "tgz": header("Content-Type: application/x-gzip"); break; case "bzip": header("Content-Type: application/x-bzip2"); break; case "zip": header("Content-Type: application/zip"); break; case "tar": header("Content-Type: application/x-tar"); } $name = $this->name. '.'. $this->type; $header = "Content-Disposition: attachment; filename=\""; $header .= $name; $header .= "\""; header($header); header("Content-Length: " . strlen($this->archive)); 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"); echo $this->archive; exit; } }