03-Apr-2023
.
Admin
Hi guys,
Today i will explained how to extract a zip, gz and rar file in custom extractor class through. This example is so easy to use in php. This example to i am create a custom extractor class in php and then create a three function extractZipArchive,extractGzipFile and extractRarArchive.
This tutorial to your folder to extractor your zip file in your folder. I am create a archive_files and paster to the dummy zip file. Then i am create a second folder in extracted_files to extract your zip file under this folder.
So you are follow for my step by step. So let's start to the example.
Index.php
<?php
// Include and initialize Extractor class
require_once 'Extractor.class.php';
$extractor = new Extractor;
// Path of archive file
$archivePath = 'archive_files/archive.zip';
// Destination path
$destPath = 'extracted_files/';
// Extract archive file
$extract = $extractor->extract($archivePath, $destPath);
if($extract){
echo $GLOBALS['status']['success'];
}else{
echo $GLOBALS['status']['error'];
}
?>
Extractor.class.php
<?php
/**
* Class Extractor
*
* Extract a archive (zip/gzip/rar) file.
*
* @author niceshipest
*
*/
class Extractor{
/**
* Checks file extension and calls suitable extractor functions.
*
* @param $archive
* @param $destination
*/
public static function extract($archive, $destination){
$ext = pathinfo($archive, PATHINFO_EXTENSION);
switch ($ext){
case 'zip':
$res = self::extractZipArchive($archive, $destination);
break;
case 'gz':
$res = self::extractGzipFile($archive, $destination);
break;
case 'rar':
$res = self::extractRarArchive($archive, $destination);
break;
}
return $res;
}
/**
* Decompress/extract a zip archive using ZipArchive.
*
* @param $archive
* @param $destination
*/
public static function extractZipArchive($archive, $destination){
// Check if webserver supports unzipping.
if(!class_exists('ZipArchive')){
$GLOBALS['status'] = array('error' => 'Your PHP version does not support unzip functionality.');
return false;
}
$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');
return true;
}else{
$GLOBALS['status'] = array('error' => 'Directory not writeable by webserver.');
return false;
}
}else{
$GLOBALS['status'] = array('error' => 'Cannot read .zip archive.');
return false;
}
}
/**
* Decompress a .gz File.
*
* @param $archive
* @param $destination
*/
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 false;
}
$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.');
return true;
}else{
$GLOBALS['status'] = array('error' => 'Error unzipping file.');
return false;
}
}
/**
* Decompress/extract a Rar archive using RarArchive.
*
* @param $archive
* @param $destination
*/
public static function extractRarArchive($archive, $destination){
// Check if webserver supports unzipping.
if(!class_exists('RarArchive')){
$GLOBALS['status'] = array('error' => 'Your PHP version does not support .rar archive functionality.');
return false;
}
// 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' => 'File extracted successfully.');
return true;
}else{
$GLOBALS['status'] = array('error' => 'Directory not writeable by webserver.');
return false;
}
}else{
$GLOBALS['status'] = array('error' => 'Cannot read .rar archive.');
return false;
}
}
}
?>
Now you can check your own.
I hope it can help you...
#PHP 8
#PHP