Распаковка zip архива с паролем

Discussion in 'PHP' started by IloveRU, 21 Jul 2017.

  1. IloveRU

    IloveRU Member

    Joined:
    21 Jul 2010
    Messages:
    53
    Likes Received:
    14
    Reputations:
    1
    Есть скрипт, который распаковывает zip архив. Как изменить скрипт, чтобы он мог распаковывать zip архивы с паролем? (пароль известен)


    Code:
    <?php
    $archive_path = '/var/www/site.ru/bitrix/templates/arhiv.zip';
    $extract_path = '/var/www/site.ru/bitrix/templates/';
    
    // распаковывает zip архив, при этом дата последних изменений извлеченных файлов (папок) – дата фактического извлечения.
    // нужно чтобы дата и время их изменений была такой же, как и самого unzip.php
    // такие же дата и время изменений должны быть установлены для папки, в которой находится сам unzip.php
    
    
    if (!file_exists($archive_path)) {
      echo "file not found " . $archive_path;
      exit;
    }
    
    $zip = new ZipArchive;
    $zip->open($archive_path);
    echo "extracting " . $zip->numFiles . " files...\n";
    $zip->extractTo($extract_path);
    
    $dirs = array();
    
    echo"\nFiles:\n";
    
    for( $i = 0; $i < $zip->numFiles; $i++ ){
        $stat = $zip->statIndex( $i );
        echo  $stat['name']  . "\n";
        touch($extract_path . $stat['name'], filemtime($archive_path));
    
        if (!array_search(dirname($stat['name']), $dirs))
          { array_push($dirs, dirname($stat['name'])); }
    }
    
    $zip->close();
    
    echo"\nFolders:\n";
    
    touch( dirname(__FILE__), filemtime($archive_path));
    
    foreach($dirs as $key=>$value) {
      if ($value <>".") {
        echo $value . "\n" ;
        touch( $extract_path . $value, filemtime($archive_path));
        }
    }
    echo "Ok!";
    ?>
     
  2. joelblack

    joelblack Reservists Of Antichat

    Joined:
    6 Jul 2015
    Messages:
    244
    Likes Received:
    450
    Reputations:
    145
    PHP:
    <?php
        $zip 
    = new ZipArchive();
        
    $zip_status $zip->open("archive.zip");

        if (
    $zip_status === true)
        {
            if (
    $zip->setPassword("123456"))
            {
                if (!
    $zip->extractTo(__DIR__))
                    echo 
    "Extraction failed (wrong password?)";
            }

            
    $zip->close();
        }
        else
        {
            die(
    "Failed opening archive: ". @$zip->getStatusString() . " (code: "$zip_status .")");
        }
     
    IloveRU likes this.
  3. barnaki

    barnaki Elder - Старейшина

    Joined:
    2 Nov 2008
    Messages:
    676
    Likes Received:
    140
    Reputations:
    4