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_filesystem WordPress filesystem subclass.
Список изменений
С версии 2.5.0 | Введена. |