PHP中的提取ZIP

使用Extractor类使用PHP将存档文件(zip,gzip和rar)提取到指定目的地。

  • 包括并初始化提取器类。
  • 指定要提取的存档文件(ZIP/GZIP/RAR)的路径。
  • 指定要在服务器上提取zip文件的目标。
  • 调用Extractor类的extract()函数。
//Include and initialize Extractor class
require_once 'Extractor.class.php';
$extractor = new Extractor;
//Path of archive file
$archivePath = '/path/to/archive.zip';
//Destination path
$destPath = '/destination/dir/';
//Extract archive file
$extract = $extractor->extract($archivePath, $destPath);
if($extract){
    echo $GLOBALS['status']['success'];
}else{
    echo $GLOBALS['status']['error'];
}
使用PHP提取ZIP文件

存档文件用于数据压缩。
zip,gzip和rar是常用的文件格式到存档文件。
通常,我们使用计算机软件提取存档文件(zip,gzip,rar等)。
但是,可以使用PHP在飞行中提取存档文件。
我们可以轻松地动态创建ZIP文件,并从带有PHP的脚本中提取ZIP文件。

ZiParchive类提供了一种简单的方法来提取PHP中的存档内容。
我们可以使用PHP中的Zi,7,在服务器上提取ZIP文件。
在本教程中,我们将展示如何在PHP中提取ZIP文件。
不仅可以使用我们的示例代码片段将在PHP中提取其他存档文件(GZIP和RAR)。

要使存档提取过程简单,我们已在PHP类中分组所有代码,并创建了一个名为Extrutionor的自定义库。
此库提供了一个即时和结构化的方法来实现PHP中的文件提取功能。

提取器类

Extractor类有助于使用PHP Zi,7,在服务器上提取存档文件(zip/gzip/rar)。

  • extract() - 此函数检查给定文件的扩展并调用合适的提取器功能。
  • '$archive' - 要提取的存档文件的相对路径。
  • '$destination' - 提取文件的位置。
  • ExtractZipArchive() - 它是Extractor类的辅助功能。此函数使用PHP中的ZIPArchive解压缩或者解压缩ZIP存档文件(.zip)。
  • ExtractGzipfile() - 它是Extractor类的辅助功能。此函数使用PHP中的GZREAD()解压缩或者解压缩GZIP存档文件(.gz)。
  • extractraRarchive() - 它是提取器类的辅助功能。此函数使用RarArchive在PHP中解压缩或者提取RAR存档文件(.rar)。
<?php
/**
 * Class Extractor
 *
 * Extract a archive (zip/gzip/rar) file.
 * 
 * @author onitroad
 * @url https://www.onitroad.com
 * 
 */
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;
        }
    }

}
日期:2020-06-02 22:15:30 来源:oir作者:oir