Расширение zip для PHP: варианты установки и примеры кода

Раздел: Администрирование -> Установка PHP расширений

Основные способы установки расширения zip для PHP

Как установить расширение zip в Linux через менеджер пакетов?

Наиболее простой и рекомендуемый способ для дистрибутивов Linux - использование системного пакетного менеджера. Расширение zip входит в состав стандартных пакетов PHP, но может отсутствовать в базовой установке.

# Для Debian/Ubuntu и производных
sudo apt update
sudo apt install php-zip

расширение zip php (установка расширения zip для php)

После установки необходимо перезапустить веб-сервер (Apache, Nginx) или PHP-FPM, чтобы изменения вступили в силу.

sudo systemctl restart apache2   # для Apache
sudo systemctl restart php8.1-fpm # указать версию PHP
Возможные проблемы:
  • Пакет php-zip не найден - скорее всего, репозиторий не содержит пакета для вашей версии PHP. Проверьте версию PHP: php -v и установите пакет, соответствующий версии, например php8.2-zip.
  • Конфликт с другими версиями PHP - если в системе установлено несколько версий, указывайте полное имя пакета с версией.
  • Расширение не загружается после установки - проверьте, что файл .ini создан в директории /etc/php/*/mods-available/ и включён (обычно это происходит автоматически).

Как включить расширение zip через php.ini, если оно уже скомпилировано?

Иногда расширение zip скомпилировано статически в PHP или присутствует в системе, но отключено директивой. Найдите файл php.ini и раскомментируйте строку extension=zip.

# Найти php.ini
php --ini
# Отредактировать (обычно /etc/php/*/cli/php.ini)
sudo nano /etc/php/8.1/cli/php.ini
# Найти и убрать точку с запятой перед extension=zip
Возможные проблемы:
  • Строки extension=zip может не быть - значит расширение не скомпилировано, нужно устанавливать через пакетный менеджер или компилировать PHP заново.
  • После изменения php.ini необходимо перезапустить веб-сервер или PHP-FPM.

Как установить расширение zip для PHP на Windows?

В дистрибутиве PHP для Windows расширение zip обычно поставляется в виде DLL-файла. Нужно включить его в php.ini и убедиться, что файл присутствует.

# В php.ini раскомментировать строку
extension=zip

# Проверить, что файл php_zip.dll существует в папке ext

Если файл отсутствует, его можно скачать вместе с дистрибутивом PHP (обычно входит в полную сборку). После изменений перезапустите веб-сервер (IIS, Apache).

Возможные проблемы:
  • Ошибка загрузки DLL - убедитесь, что версия расширения соответствует версии PHP (thread-safe или нет).
  • Отсутствует библиотека zlib.dll - для работы zip требуется zlib, которая обычно есть в Windows или в папке PHP.

Как установить расширение zip через pecl?

Редкий, но возможный вариант - использование пакетного менеджера PECL. Расширение zip уже не поддерживается через pecl для современных версий PHP, но для старых может сработать.

sudo pecl install zip

После установки потребуется добавить extension=zip.so в php.ini.

Возможные проблемы:
  • PECL может сообщить, что расширение устарело и предлагает использовать встроенную поддержку - в таком случае лучше использовать пакетный менеджер.
  • Для работы потребуется установить php-dev и другие зависимости.

Как скомпилировать PHP с поддержкой zip из исходников?

Если требуется нестандартная конфигурация PHP, можно собрать его из исходного кода с опцией --with-zip. Этот вариант подходит для опытных администраторов.

./configure --with-zip --prefix=/usr/local/php
make
sudo make install

Убедитесь, что установлены пакеты разработки zlib (libzip-dev, zlib1g-dev).

Возможные проблемы:
  • Отсутствие библиотеки libzip - установите её через системный менеджер.
  • Конфликт с уже установленной версией PHP - указывайте другой путь.

Как проверить, что расширение zip работает?

Для проверки используйте команду:

php -m | grep zip

Вывод должен содержать zip. Также можно выполнить PHP-скрипт:

<?php
if (extension_loaded('zip')) {
    echo "Расширение zip загружено";
} else {
    echo "Расширение zip не найдено";
}

Примеры использования расширения zip в PHP

Пример
<?php
// Создание нового ZIP-архива
$zip = new ZipArchive();
$filename = '/tmp/example.zip';

if ($zip->open($filename, ZipArchive::CREATE | ZipArchive::OVERWRITE) === TRUE) {
    // Добавление файла из строки
    $zip->addFromString('hello.txt', 'Hello, world!');
    
    // Добавление существующего файла
    $zip->addFile('/etc/hostname', 'hostname.txt');
    
    // Добавление директории (пустой)
    $zip->addEmptyDir('subdir');
    
    $zip->close();
    echo "Архив создан: $filename\n";
} else {
    echo "Ошибка создания архива\n";
}
?>
Архив создан: /tmp/example.zip
Пример
<?php
// Извлечение ZIP-архива
$zip = new ZipArchive();
$res = $zip->open('/tmp/example.zip');
if ($res === TRUE) {
    $zip->extractTo('/tmp/extract/');
    $zip->close();
    echo "Извлечение завершено\n";
} else {
    echo "Ошибка открытия архива (код: $res)\n";
}
?>
Извлечение завершено
Пример
<?php
// Получение информации об архиве
$zip = new ZipArchive();
if ($zip->open('/tmp/example.zip') === TRUE) {
    echo "Количество файлов: " . $zip->numFiles . "\n";
    for ($i = 0; $i < $zip->numFiles; $i++) {
        $stat = $zip->statIndex($i);
        echo "Файл {$i}: {$stat['name']} ({$stat['size']} байт)\n";
    }
    $zip->close();
}
?>
Количество файлов: 3
Файл 0: hello.txt (13 байт)
Файл 1: hostname.txt (5 байт)
Файл 2: subdir/ (0 байт)
Пример
<?php
// Работа с паролем (шифрование) - доступно с PHP 7.2+
$zip = new ZipArchive();
$zip->open('/tmp/encrypted.zip', ZipArchive::CREATE | ZipArchive::OVERWRITE);
$zip->setPassword('secret');
$zip->addFromString('secure.txt', 'Этот файл защищён паролем');
$zip->close();
echo "Зашифрованный архив создан\n";

// Извлечение зашифрованного архива
$zip2 = new ZipArchive();
$zip2->open('/tmp/encrypted.zip');
$zip2->setPassword('secret');
$zip2->extractTo('/tmp/extract_enc/');
$zip2->close();
?>
Зашифрованный архив создан
Пример
<?php
// Проверка поддержки расширения и версии
if (class_exists('ZipArchive')) {
    echo "ZipArchive доступен\n";
    $v = ZipArchive::getLibVersion();
    echo "Версия библиотеки libzip: $v\n";
} else {
    echo "ZipArchive не найден\n";
}
?>
ZipArchive доступен
Версия библиотеки libzip: 1.7.3
Пример
<?php
// Создание архива со сжатием
$zip = new ZipArchive();
$zip->open('/tmp/compressed.zip', ZipArchive::CREATE | ZipArchive::OVERWRITE);
// Установка метода сжатия (по умолчанию ZipArchive::CM_DEFAULT)
$zip->setCompressionIndex(0, ZipArchive::CM_DEFLATE);
$zip->addFromString('data.txt', str_repeat('A', 10000));
$zip->close();
echo "Файл добавлен со сжатием\n";
?>
Файл добавлен со сжатием
Пример
<?php
// Удаление файла из архива
$zip = new ZipArchive();
$zip->open('/tmp/example.zip');
$zip->deleteName('hello.txt');
$zip->close();
echo "Файл удалён\n";
?>
Файл удалён
Пример
<?php
// Использование потоков (php://temp)
$zip = new ZipArchive();
$zip->open('/tmp/stream.zip', ZipArchive::CREATE | ZipArchive::OVERWRITE);
$zip->addFromString('stream.txt', 'Данные из потока');
$zip->close();

// Чтение архива через поток
echo file_get_contents('zip:///tmp/stream.zip#stream.txt');
?>
Данные из потока

Установка расширения ZIP для PHP - comments

En
расширение zip php (php)