PHP: Как распаковать .zip-архив с помощью PHP

PHP: Как распаковать .zip-архив с помощью PHP


В этом руководстве мы рассмотрим пример того, как можно распаковать .zip-архив с помощью PHP.

Ваш ZIP-архив должен находиться вместе с файлом unpack.php в одной директории

Содержимое директории:

/app/
   | -> app.zip
   | -> readme.txt
   | -> unpack.php


Откройте файл unpack.php и добавьте в него следующий код:

<?php

// Проверяем существование файла app.zip в директории
if(!file_exists('app.zip')){
 die('"app.zip" отсутствует!');
}

// Проверяем расширение файла .zip
if(!class_exists('ZipArchive')){
 die('Расширение "ZipArchive" отсутствует или отключено.');
}

// Временная папка
$tmp_folder = 'tmp_app';

// Создаём директорию и устанавливаем атрибуты для папки 
mkdir($tmp_folder, 0777);

// Распаковка
$zip = new ZipArchive;
$res = $zip->open('app.zip');
if ($res === TRUE) {
 $zip->extractTo($tmp_folder);
 $zip->close();

 // Проверяем существование файла "readme.txt"
 if(file_exists('readme.txt')){
  unlink('readme.txt'); # Удаляем файл "readme.txt" после распаковки, если он существует
 }
 echo 'OK';
 recurse_copy($tmp_folder, __DIR__);
 delete_files($tmp_folder);
 unlink($tmp_folder.'/.htaccess');
 rmdir( $tmp_folder );
 unlink('app.zip');  # Удаляем файл "app.zip" после распаковки
 header('Location: index.php');
 unlink('unpack.php');  # Удаляем файл "unpack.php" после распаковки
} else {
  die('Не удалось извлечь!');
}

function recurse_copy($src,$dst) { 
 $dir = opendir($src); 
 @mkdir($dst); 
 while(false !== ( $file = readdir($dir)) ) { 
  if (( $file != '.' ) && ( $file != '..' )) { 
   if ( is_dir($src . '/' . $file) ) { 
    recurse_copy($src . '/' . $file,$dst . '/' . $file); 
   } 
   else { 
    copy($src . '/' . $file,$dst . '/' . $file);
   } 
  } 
 } 
 closedir($dir); 
}

function delete_files($target) {
 if(is_dir($target)){
  $files = glob( $target . '*', GLOB_MARK );

  foreach( $files as $file ){
   delete_files( $file );      
  }

  rmdir( $target );
 } elseif(is_file($target)) {
  unlink( $target );  
 }
}

?>


Для распаковки используйте URL: yourdomain.com/unpack.php



Report Page