Использование класса ZipArchive в PHP - PullRequest
0 голосов
/ 03 августа 2011

Я использую этот код для чтения содержимого защищенного каталога (имя пользователя и пароль), который называется (protect).

<?php
require_once("admin/global.inc.php");

// increase script timeout value
ini_set('max_execution_time', 300);

//Generate a new flag
$random = (rand(000000,999999));
$date = date("y-m-d");

// create object
$zip = new ZipArchive();

// open archive 
if ($zip->open("$date-$random.zip", ZIPARCHIVE::CREATE) !== TRUE) {
    die ("Could not open archive");
}

// initialize an iterator
// pass it the directory to be processed
$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator("protect/")); //check question #2

// iterate over the directory
// add each file found to the archive
foreach ($iterator as $key=>$value) {
        if ($key != 'protect/.htaccess')
                {
    $zip->addFile(realpath($key), $key) or die ("ERROR: Could not add file: $key");        
$query="INSERT INTO `archives_logs` (`id`, `file`, `flag`, `date`) VALUES (NULL, '$key', '$random', '$date')";
            $query_result = mysql_query ($query);
                }
}

// close and save archive
$zip->close();
echo "Archive created successfully.";    
?>

Если я размещаю файл с кодом в месте, отличном от местоположения защищенного каталога, я долженизмените путь к каталогу, который нужно сжать, что нормально, НО проблема в том, что все каталоги в пути включены в Zip-архив.Поэтому, если открыть сжатый файл, я получу: www / username / public_html / etc ...

Вот каталоги strcuture: www / protect / (файлы, которые будут сжаты здесь) www / compress_code.php (здесьмой текущий файл кода)

Путь, в котором я хочу разместить свой файл кода: www / protect / admin / files / compress_code.php

Q1) Как сохранить файл кодав последнем указанном месте, БЕЗ пути к нему в моем файле ZipArchive?

Q2) Когда мой код находится в том же месте каталога, который нужно сжать, и когда я открываю сжатый файл, который я вижу, защищаюфайлы).Могу ли я добавить только содержимое каталога защиты в Zip-архив, не включая сам каталог?

1 Ответ

0 голосов
/ 03 августа 2011

Все довольно просто:

  1. Сохраните целевой путь в переменной.
  2. Удалите целевой путь из локального имени перед добавлением файла.

Вот так:

$flags = FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::SKIP_DOTS;
$target = 'protect/';
$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($target, $flags));

foreach ($iterator as $key=>$value) {
    if ($key != "{$target}.htaccess")
    {
        $localname = substr($key, strlen($target));
        $zip->addFile($key, $localname) or die ("ERROR: Could not add file: $key");
    }
}

На самом деле это должно ответить на оба ваших вопроса.

...