WP_FILESYSTEM() │ WP 2.5.0
Функция WP_FILESYSTEM() инициализирует и подключает классы абстракции файловой системы WordPress.
Эта функция подключает выбранный метод передачи (transport) и пытается установить соединение.
Плагины могут добавлять дополнительные методы передачи и заставлять WordPress использовать их, возвращая имя файла через фильтр filesystem_method_file.
Время выполнения:
- 1 раз — 0.001446 сек (очень медленно)
- 50000 раз — 4.11 сек (быстро)
Хуки Функции
Функция использует хук filesystem_method_file
, который позволяет изменить путь к файлам конкретного метода работы с файловой системой.
Возвращаемые значения
Функция возвращает:
true
— если соединение успешно.false
— если произошла ошибка.null
— если файл класса метода работы с файловой системой не существует.
Использование
Функция может быть использована следующим образом:
WP_Filesystem( $args, $context, $allow_relaxed_file_ownership );
Параметры
-
$args (array|false) — Параметры соединения, которые передаются непосредственно в классы
WP_Filesystem_*()
.- По умолчанию:
false
- По умолчанию:
-
$context (string|false) — Контекст для функции
get_filesystem_method()
.- По умолчанию:
false
- По умолчанию:
-
$allow_relaxed_file_ownership (true|false) — Разрешает ли использование прав доступа
Group/World writable
.- По умолчанию:
false
- По умолчанию:
Примеры
Пример 1: Использование WP_FILESYSTEM
global $wp_filesystem;
// Создаем объект для работы с файлами, если он еще не создан
if( ! $wp_filesystem ){
require_once ABSPATH . 'wp-admin/includes/file.php';
WP_Filesystem();
}
// Используем объект
echo $wp_filesystem->abspath(); // Путь: /home/www/example.com/public_html/
$wp_filesystem->delete( $maintenance_file ); // Удаление файла
$wp_filesystem->put_contents( $maintenance_file, $maintenance_string ); // Запись в файл
Полезные методы
Вот некоторые полезные методы, которые можно использовать с объектом $wp_filesystem
:
- abspath() — Возвращает путь к ABSPATH на удаленной файловой системе.
- copy( $source, $destination, $overwrite, $mode ) — Копирует файл.
- cwd() — Получает текущую рабочую директорию.
- delete( $file, $recursive, $type ) — Удаляет файл или директорию.
- dirlist( $path, $include_hidden, $recursive ) — Получает информацию о файлах в директории.
- exists( $path ) — Проверяет, существует ли файл или директория.
- get_contents( $file ) — Читает содержимое файла в строку.
- is_dir( $path ) — Проверяет, является ли ресурс директорией.
- is_file( $file ) — Проверяет, является ли ресурс файлом.
- mkdir( $path, $chmod, $chown, $chgrp ) — Создает директорию.
- move( $source, $destination, $overwrite ) — Перемещает файл.
Пример 2: Создание нового экземпляра
Каждый вызов WP_Filesystem()
перезаписывает переменную $wp_filesystem
. Поэтому лучше сначала проверить, был ли уже создан объект, перед вызовом этой функции:
require_once ABSPATH . 'wp-admin/includes/file.php';
global $wp_filesystem;
// Инициализация
WP_Filesystem();
echo get_class( $wp_filesystem ); // WP_Filesystem_Direct
// Вызов еще раз
define( 'FS_METHOD', 'ssh2' );
WP_Filesystem();
echo get_class( $wp_filesystem ); // WP_Filesystem_SSH2
Примечания
- Глобальная переменная:
WP_Filesystem_Base
. Переменная$wp_filesystem
является подклассом файловой системы WordPress.
Изменения
Функция была представлена в версии 2.5.0.
Код WP_FILESYSTEM
Если вы хотите посмотреть реализацию функции, она выглядит следующим образом:
function WP_Filesystem( $args = false, $context = false, $allow_relaxed_file_ownership = false ) {
global $wp_filesystem;
require_once ABSPATH . 'wp-admin/includes/class-wp-filesystem-base.php';
$method = get_filesystem_method( $args, $context, $allow_relaxed_file_ownership );
if ( ! $method ) {
return false;
}
if ( ! class_exists( "WP_Filesystem_$method" ) ) {
$abstraction_file = apply_filters( 'filesystem_method_file', ABSPATH . 'wp-admin/includes/class-wp-filesystem-' . $method . '.php', $method );
if ( ! file_exists( $abstraction_file ) ) {
return;
}
require_once $abstraction_file;
}
$method = "WP_Filesystem_$method";
$wp_filesystem = new $method( $args );
if ( ! defined( 'FS_CONNECT_TIMEOUT' ) ) {
define( 'FS_CONNECT_TIMEOUT', 30 ); // 30 секунд.
}
if ( ! defined( 'FS_TIMEOUT' ) ) {
define( 'FS_TIMEOUT', 30 ); // 30 секунд.
}
if ( is_wp_error( $wp_filesystem->errors ) && $wp_filesystem->errors->has_errors() ) {
return false;
}
if ( ! $wp_filesystem->connect() ) {
return false; // Ошибка подключения к серверу.
}
if ( ! defined( 'FS_CHMOD_DIR' ) ) {
define( 'FS_CHMOD_DIR', ( fileperms( ABSPATH ) & 0777 | 0755 ) );
}
if ( ! defined( 'FS_CHMOD_FILE' ) ) {
define( 'FS_CHMOD_FILE', ( fileperms( ABSPATH . 'index.php' ) & 0777 | 0644 ) );
}
return true;
}
Похожие функции
Функции для работы с файловой системой:
- copy_dir() — Копирует директорию.
- get_dirsize() — Получает размер директории.
- list_files() — Список файлов.
- wp_delete_file() — Удаляет файл.
- wp_mkdir_p() — Создает директорию, если она не существует.
Эти функции помогут вам эффективно управлять файлами и каталогами в ваших проектах WordPress.