Функция unzip_file()
позволяет распаковать ZIP-архив в указанную директорию на сервере с использованием абстракции файловой системы WordPress (WP Filesystem API). Перед вызовом этой функции предполагается, что функция WP_Filesystem()
уже была вызвана и сконфигурирована.
unzip_file( string $file, string $to ): true|WP_Error
Функция автоматически пытается увеличить лимит памяти до 256 МБ перед началом распаковки, однако реальное использование памяти не должно превышать размер самого архива. При наличии в архиве папки __MACOSX
, она будет проигнорирована.
Параметры
$file
(строка, обязательный) — Полный путь к ZIP-архиву, который необходимо распаковать.$to
(строка, обязательный) — Полный путь к директории, куда следует распаковать архив.
Возвращаемое значение
true
— Если распаковка прошла успешно.WP_Error
— Если произошла ошибка.
Пример 1: Распаковка ZIP-архива в директорию загрузок
В этом примере демонстрируется, как распаковать файл filename.zip
, находящийся в директории загрузок WordPress, в ту же самую директорию.
// Подключаем необходимые файлы WordPress
require_once ABSPATH . 'wp-admin/includes/file.php';
// Инициализируем файловую систему WordPress
WP_Filesystem();
// Получаем путь к директории загрузок
$upload_dir = wp_upload_dir();
$destination_path = $upload_dir['path'];
// Путь к ZIP-файлу
$zip_file = $destination_path . '/filename.zip';
// Распаковываем ZIP-архив
$result = unzip_file( $zip_file, $destination_path );
if ( $result === true ) {
echo 'Архив успешно распакован!';
} else {
echo 'Ошибка при распаковке: ' . $result->get_error_message();
}
Пример 2: Распаковка архива в директорию плагина
Этот пример демонстрирует распаковку ZIP-архива в директорию плагина.
// Проверяем, определена ли функция unzip_file
if ( ! function_exists( 'unzip_file' ) ) {
require_once ABSPATH . 'wp-admin/includes/file.php';
}
// Инициализируем файловую систему
global $wp_filesystem;
if ( ! $wp_filesystem ) {
WP_Filesystem();
}
// Путь к плагину
define( 'MY_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
// Путь к ZIP-файлу и директории назначения
$zip_file = MY_PLUGIN_DIR . 'plugin-archive.zip';
$destination = MY_PLUGIN_DIR;
// Распаковываем ZIP-архив
$result = unzip_file( $zip_file, $destination );
if ( $result === true ) {
echo 'Архив успешно распакован в директорию плагина!';
} else {
echo 'Ошибка при распаковке: ' . $result->get_error_message();
}
Пример 3: Ошибки и обработка ошибок
Функция unzip_file()
возвращает объект WP_Error
в случае ошибки. Вот как можно обрабатывать такие ошибки:
// Инициализируем файловую систему
require_once ABSPATH . 'wp-admin/includes/file.php';
WP_Filesystem();
// Путь к архиву и директории назначения
$file = WP_CONTENT_DIR . '/uploads/my-archive.zip';
$to = WP_CONTENT_DIR . '/uploads/extracted/';
// Распаковываем архив
$result = unzip_file( $file, $to );
if ( is_wp_error( $result ) ) {
echo 'Ошибка: ' . $result->get_error_message();
} else {
echo 'Архив успешно распакован!';
}
Заключение
Функция unzip_file()
— это удобный инструмент для работы с ZIP-архивами в WordPress, который позволяет распаковывать файлы на сервере с использованием безопасного и гибкого API файловой системы. Она поддерживает работу с различными файловыми системами (FTP, SSH) и помогает избежать проблем с правами доступа.