unzip_file()
Распаковывает указанный ZIP-архив в папку на сервере с помощью API файловой системы WordPress.
Предполагается, что функция WP_Filesystem() уже была вызвана и сконфигурирована.
Не извлекает папку __MACOSX, если она есть в архиве.
Пытается увеличить лимит памяти до 256M перед началом распаковки, хотя количество оперативной памяти не должно быть сильно больше размера распаковываемого архива.
Функционал основан на API файловой системы в основе которого лежит базовый класс WP_Filesystem_Base. Который расширяется подходящим под конкретный сервер классом. Итоговый объект находится в глобальной переменной $wp_filesystem.
Читайте о Filesystem_API
Для работы функции вне админки, нужно подключить файл:
require_once ABSPATH . 'wp-admin/includes/file.php';
Возможные методы переменной $wp_filesystem, смотрите у класса:
И у одного из производных от него:
Хуки из функции
Возвращает
true|WP_Error. WP_Error в случае ошибки, или True в случае успеха.
Использование
unzip_file( $file, $to );
- $file(строка) (обязательный)
- Полный путь до архива
- $to(строка) (обязательный)
- Полный путь до папки куда будет распакован архив. Тут нужно указать путь через API файловой системы WordPress.
Примеры
#1 Пример распаковки архива с помощью unzip_file()
Хотя эта функция требует инициализации API файловой системы, она не является методом объекта $wp_filesystem, поэтому ей нужно передавать параметры с учетом $wp_filesystem.
Первый параметр, $file, должен быть абсолютным путем к файлу (на сервере), а параметр $to должен указывать на абсолютный путь файловой системы WordPress.
// даже в админке нужно проверить определена ли функция
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__ ) );
// эта переменная должна быть уже установлена при инициализации файловой системы
global $wp_filesystem;
// удаленный путь до файловой системы
$plugin_path = str_replace( ABSPATH, $wp_filesystem->abspath(), MY_PLUGIN_DIR );
// ПРАВИЛЬНЫЙ вариант использования функции
$file = MY_PLUGIN_DIR . '/plugin-file.zip';
$to = $plugin_path;
$result = unzip_file( $file, $to );
if( $result === true ){
// OK: архив распакован
}
// НЕПРАВИЛЬНЫЙ вариант использования функции
// $to не может быть прямым путем к папке, иначе методы FTP и SSH остаются в нерабочими
$file = MY_PLUGIN_DIR . '/plugin-file.zip';
$to = MY_PLUGIN_DIR;
unzip_file( $file, $to );
// НЕПРАВИЛЬНЫЙ вариант использования функции
// Если $file не является "прямым" абсолютным путем,
// то пользователи, не использующие методы FTP и SSH, остаются с носом
$file = $plugin_path . '/plugin-file.zip';
$to = $plugin_path;
unzip_file($file, $to);
Заметки
- Global. WP_Filesystem_Base.
$wp_filesystemWordPress filesystem subclass.
Список изменений
| С версии 2.5.0 | Введена. |