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 дивіться у класу:
І в одного з похідних від нього:
_unzip_file_pclzip()
Хуки з функції
Повертає
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 | Введено. |