Большие возможности маленького сайта (Работа с Zip архивами)

Автор статьи: Феськов Кузьма
Сайт Автора: php.russofile.ru
E-mail Автора: kuzma@russofile.ru
Дата публикации: 26.04.2006




Дополнительные аргументы.

На сегодняшний день определены следующие аргументы:

PCLZIP_OPT_PATH

Этот аргумент указывает путь до папки, куда будут извлечены файлы из архива. Значение – текстовая строка.

      $list = $archive->extract(PCLZIP_OPT_PATH, "extract/folder/");

Этот аргумент может использоваться с методами 'extract();' и 'extractByIndex();'.

PCLZIP_OPT_ADD_PATH

Этот параметр позволяет указать путь для файла при добавлении его в архив. Это позволит заархивировать файл 'file.txt' с путем 'bacup/file.txt' или извлечь файл 'backup/file.txt' с путем 'folder/backup/file.txt'.

Значение – текстовая строка.

      $list = $archive->create("file.txt,image.gif",
                               PCLZIP_OPT_ADD_PATH, "backup");

Этот аргумент может использоваться с методами 'create();', 'add();', 'extract();'.

PCLZIP_OPT_REMOVE_PATH

Этот аргумент позволяет подавить часть или весь путь файлов (или папок) при их извлечении. Это позволит архивировать файл '/usr/local/user/test/file.txt' подобно файлу с названием 'test/file.txt' или извлекать файл, сохраненный как 'folder/data/file.txt' как файл 'data/file.txt'.

Значение – текстовая строка.

      $list = $archive->add("/usr/local/user/test/file.txt",
                            PCLZIP_OPT_REMOVE_PATH, "/usr/local/user");

Этот аргумент может использоваться совместно с методами 'create();', 'add();', 'extract();' и 'extractByIndex();'

Примечание: этот аргумент игнорируется, если вы используете аргумент PCLZIP_OPT_REMOVE_ALL_PATH в том же самом вызове метода.

PCLZIP_OPT_REMOVE_ALL_PATH

Этот аргумент позволяет подавить весь путь файла при его извлечении или добавлении в архив.

Этот параметр позволит вам не указывать ни какого шаблона пути для отсечения. Однако, будте внимательны, вложенность каталогов может быть большой, следите за тем, чтобы внутри не попадались файлы с одинаковым названием.

Значения не имеет.

  $list = $archive->create("data/file.txt images/image.gif",
                           PCLZIP_OPT_REMOVE_ALL_PATH);
  // Удалит путь 'data/' для файла 'data/file.txt'
  // и путь 'images/' для файла 'images/image.gif'

Может использоваться с методами 'create();', 'add();', 'extract();' и 'extractByIndex();'.

PCLZIP_OPT_SET_CHMOD

Дает возможность изменить атрибуты файла после его извлечения. На *NIX системах управление доступа и владелец файла (системный атрибут) не позволяют доступ к файлу отовсюду. В частности, пользователь, под которым запущен процесс PHP дает файлам только свои права, при определенных настройках они могут запрещать пользование файлами другими пользователями. Цель этого аргумента – назначить файлам нужные вам права.

Значение – одиночное октальное значение (например, 0777).

  $list = $archive->extract(PCLZIP_OPT_SET_CHMOD, 0777);

Этот аргумент может использоваться с методами 'extract();' и 'extractByIndex();'.

Примечание: этот аргумент не тестировался в полном объеме и носит статус ЭКСПЕРИМЕНТАЛЬНОГО.

PCLZIP_OPT_BY_NAME

Позволяет извлекать файлы из архива указывая их полное название.

    $archive = new PclZip('test.zip');
    $rule_list[0] = 'data/file1.txt';
    $rule_list[1] = 'data/file2.txt';
    $list = $archive->extract(PCLZIP_OPT_BY_NAME, $rule_list);
    if ($list == 0) {
      echo "ERROR : ".$archive->errorInfo(true);
    }

Фильтр может быть массивом или текстовой строкой с перечислением через запятую.

    $archive = new PclZip('test.zip');
    $list = $archive->extract(PCLZIP_OPT_BY_NAME, 
                              "data/file1.txt,data/file2.txt");
    if ($list == 0) {
      echo "ERROR : ".$archive->errorInfo(true);
    }

См. также: PCLZIP_OPT_BY_PREG, PCLZIP_OPT_BY_INDEX и PCLZIP_OPT_BY_EREG.

PCLZIP_OPT_BY_EREG

Этот параметр позволяет извлекать файлы и папки отфильтровывая их регулярным выражением. Используется функция PHP 'ereg()'.

    $archive = new PclZip('test.zip');
    $list = $archive->extract(PCLZIP_OPT_BY_EREG, "txt$");
    if ($list == 0) {
      echo "ERROR : ".$archive->errorInfo(true);
    }

См. также PCLZIP_OPT_BY_PREG, PCLZIP_OPT_BY_NAME и PCLZIP_OPT_BY_INDEX.

PCLZIP_OPT_BY_PREG

Этот параметр позволяет извлекать файлы и папки отфильтровывая их регулярным выражением. Используется функция PHP 'preg()'.

    $archive = new PclZip('test.zip');
    $list = $archive->extract(PCLZIP_OPT_BY_PREG, "txt$");
    if ($list == 0) {
      echo "ERROR : ".$archive->errorInfo(true);
    }

См. также PCLZIP_OPT_BY_EREG, PCLZIP_OPT_BY_NAME и PCLZIP_OPT_BY_INDEX.

PCLZIP_OPT_BY_INDEX

Позволяет извлекать файлы и папки указывая их индексы в архиве.

 $archive = new PclZip('test.zip');
 $list = $archive->extract(PCLZIP_OPT_BY_INDEX, array ('0-4','2-7','10-33'));
 if ($list == 0) {
   echo "ERROR : ".$archive->errorInfo(true);
 }

См. также PCLZIP_OPT_BY_PREG, PCLZIP_OPT_BY_NAME и PCLZIP_OPT_BY_EREG.

PCLZIP_OPT_EXTRACT_AS_STRING

Позволяет извлечь файл в строковую переменную а не в файл.

Это может понадобиться, если вы хотите получить содержимое файла без использования файловой системы.

Для примера:

  • показать 'readme' файл;
  • непосредственно выдать файл пользователю (смотри так же PCLZIP_OPT_EXTRACT_IN_OUTPUT).

Вы должны быть внимательными извлекая все файлы из архива. Это может привести к нехватке памяти.

    $archive = new PclZip('test.zip');
    $list = $archive->extract(PCLZIP_OPT_BY_NAME, "data/readme.txt",
                              PCLZIP_OPT_EXTRACT_AS_STRING);
    if ($list == 0) {
      echo "ERROR : ".$archive->errorInfo(true);
      exit;
    }
    echo $list[0]['content'];

См. также PCLZIP_OPT_EXTRACT_IN_OUTPUT.

PCLZIP_OPT_EXTRACT_IN_OUTPUT

Этот аргумент дает вам возможность извлечь файл непосредственно на устройство вывода, подобно команде echo.

    $archive = new PclZip('test.zip');
    $list = $archive->extract(PCLZIP_OPT_BY_NAME, "data/readme.txt",
                              PCLZIP_OPT_EXTRACT_IN_OUTPUT);
    if ($list == 0) {
      echo "ERROR : ".$archive->errorInfo(true);
    }

См. также PCLZIP_OPT_EXTRACT_AS_STRING.

PCLZIP_OPT_NO_COMPRESSION

Позволяет добавить файл в архив не сжимая его.

    $archive = new PclZip('test.zip');
    $list = $archive->add("data/file.txt", PCLZIP_OPT_NO_COMPRESSION);
    if ($list == 0) {
      echo "ERROR : ".$archive->errorInfo(true);
    }


PCLZIP_OPT_COMMENT

Позволяет добавить комментарий к архиву. Если комментарий уже существует, заменит его.

    $archive = new PclZip('test.zip');
    $list = $archive->create("data", PCLZIP_OPT_COMMENT, "Add a comment");
    if ($list == 0) {
      echo "ERROR : ".$archive->errorInfo(true);
    }

См. также PCLZIP_OPT_ADD_COMMENT и PCLZIP_OPT_PREPEND_COMMENT.

PCLZIP_OPT_ADD_COMMENT

Позволяет добавить комментарий к архиву. Если комментарий уже существует, добавит новый комментарий в конец существующего.

    $archive = new PclZip('test.zip');
    $list = $archive->add("data", PCLZIP_OPT_ADD_COMMENT, 
                          "Add a comment after the existing one");
    if ($list == 0) {
      echo "ERROR : ".$archive->errorInfo(true);
    }

См. также PCLZIP_OPT_COMMENT и PCLZIP_OPT_PREPEND_COMMENT.

PCLZIP_OPT_PREPEND_COMMENT

Позволяет добавить комментарий к архиву. Если комментарий уже существует, добавит новый комментарий перед имеющимся.

    $archive = new PclZip('test.zip');
    $list = $archive->add("data", PCLZIP_OPT_PREPEND_COMMENT, 
                          "Add a comment before the existing one");
    if ($list == 0) {
      echo "ERROR : ".$archive->errorInfo(true);
    }

См. также PCLZIP_OPT_COMMENT и PCLZIP_OPT_ADD_COMMENT.