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 | Введено. |