Функция WP_Filesystem()
инициализирует и подключает абстрактные классы файловой системы WordPress, предоставляя разработчикам удобный интерфейс для взаимодействия с файлами. Это API позволяет работать с файлами независимо от используемой серверной среды, будь то FTP, SSH или локальная файловая система.
WP_Filesystem( array|false $args = false, string|false $context = false, bool $allow_relaxed_file_ownership = false ): bool|null
Функция WP_Filesystem()
загружает необходимые классы и пытается подключиться к файловой системе, используя выбранный транспорт, такой как локальная система (Direct), FTP, или SSH. Если подключение к файловой системе успешно, создается объект класса для взаимодействия с файлами.
Параметры
- $args (массив|false, опционально) — параметры для подключения, передаются напрямую в классы типа
WP_Filesystem_*()
. По умолчанию —false
. - $context (строка|false, опционально) — контекст, который используется для выбора метода файловой системы через функцию
get_filesystem_method()
. По умолчанию —false
. - $allow_relaxed_file_ownership (bool, опционально) — разрешить ли группу или миру (group/world) возможность записи. По умолчанию —
false
.
Возвращаемое значение
- Возвращает
true
, если подключение к файловой системе прошло успешно. - Возвращает
false
, если подключение не удалось (например, не удалось подключиться по FTP). - Возвращает
null
, если файл класса метода файловой системы не существует.
Пример 1: Инициализация файловой системы и создание объекта
Этот пример демонстрирует инициализацию файловой системы и использование объекта для взаимодействия с файлами:
global $wp_filesystem;
// Проверяем, инициализирована ли файловая система
if ( ! $wp_filesystem ) {
require_once ABSPATH . 'wp-admin/includes/file.php'; // Подключаем необходимые файлы
WP_Filesystem(); // Инициализация
}
// Используем объект для получения пути к корню WordPress
echo $wp_filesystem->abspath(); // Например: /home/user/public_html/
В этом примере мы сначала проверяем, инициализирован ли объект файловой системы, а затем, если нет, инициализируем его с помощью WP_Filesystem()
.
Пример 2: Работа с файлами — создание и запись
После инициализации файловой системы можно использовать методы объекта для работы с файлами. В этом примере создаем файл и записываем в него данные:
global $wp_filesystem;
if ( ! $wp_filesystem ) {
require_once ABSPATH . 'wp-admin/includes/file.php';
WP_Filesystem();
}
$file = $wp_filesystem->abspath() . 'test-file.txt';
$content = 'Это содержимое файла.';
// Создаем файл и записываем в него данные
if ( ! $wp_filesystem->put_contents( $file, $content, FS_CHMOD_FILE ) ) {
echo 'Не удалось записать файл.';
} else {
echo 'Файл успешно создан и записан.';
}
Этот пример показывает, как создать файл в корневой директории WordPress и записать в него данные.
Пример 3: Удаление файлов и директорий
Файловая система WordPress позволяет также удалять файлы и каталоги. В следующем примере удаляем файл:
global $wp_filesystem;
if ( ! $wp_filesystem ) {
require_once ABSPATH . 'wp-admin/includes/file.php';
WP_Filesystem();
}
$file = $wp_filesystem->abspath() . 'test-file.txt';
// Удаляем файл, если он существует
if ( $wp_filesystem->exists( $file ) && ! $wp_filesystem->delete( $file ) ) {
echo 'Не удалось удалить файл.';
} else {
echo 'Файл успешно удален.';
}
Этот код проверяет существование файла и удаляет его с помощью метода delete()
.
Пример 4: Использование методов FTP для управления файлами
При использовании удаленных серверов через FTP или SSH, можно подключаться и управлять файлами, не завися от локальной файловой системы. Пример подключения через FTP:
$args = array(
'hostname' => 'ftp.example.com',
'username' => 'ftp_user',
'password' => 'ftp_password',
'connection_type' => 'ftp'
);
$context = WP_CONTENT_DIR; // Контекст — директория для проверки прав доступа
if ( ! WP_Filesystem( $args, $context ) ) {
echo 'Не удалось подключиться к FTP серверу.';
} else {
echo 'Успешно подключено через FTP.';
}
Этот пример показывает, как можно использовать параметры для подключения к FTP серверу через файловую систему WordPress.
Полный список полезных методов WP_Filesystem
- abspath() — Возвращает путь на удаленной файловой системе, соответствующий
ABSPATH
. - copy( $source, $destination, $overwrite = false, $mode = false ) — Копирует файл из одного места в другое. Может перезаписать существующий файл.
- cwd() — Возвращает текущую рабочую директорию.
- delete( $file, $recursive = false, $type = ‘file’ ) — Удаляет файл или директорию. Можно рекурсивно удалять содержимое директорий.
- dirlist( $path, $include_hidden = true, $recursive = false ) — Получает список файлов и директорий по указанному пути. Включает скрытые файлы, если это задано.
- exists( $path ) — Проверяет, существует ли файл или директория.
- get_contents( $file ) — Читает содержимое файла в строку.
- get_contents_array( $file ) — Читает содержимое файла в массив, где каждая строка файла является отдельным элементом массива.
- is_binary( $text ) — Определяет, содержит ли переданная строка бинарные данные.
- is_dir( $path ) — Проверяет, является ли указанный путь директорией.
- is_file( $file ) — Проверяет, является ли указанный путь файлом.
- is_readable( $file ) — Проверяет, доступен ли файл для чтения.
- is_writable( $path ) — Проверяет, доступен ли файл или директория для записи.
- mkdir( $path, $chmod = false, $chown = false, $chgrp = false ) — Создает директорию с указанными правами доступа.
- move( $source, $destination, $overwrite = false ) — Перемещает файл в новое место. Может перезаписать существующий файл.
- mtime( $file ) — Возвращает время последнего изменения файла.
- put_contents( $file, $contents, $mode = false ) — Записывает строку в файл. Может задавать режим прав доступа.
- rmdir( $path, $recursive = false ) — Удаляет директорию. Можно рекурсивно удалять содержимое.
- search_for_folder( $folder, $base = », $loop = false ) — Ищет папку на удаленной файловой системе.
- size( $file ) — Возвращает размер файла в байтах.
- touch( $file, $time = null, $atime = null ) — Устанавливает время последнего доступа и изменения файла.
- wp_content_dir() — Возвращает путь к директории
WP_CONTENT_DIR
на удаленной файловой системе. - wp_lang_dir() — Возвращает путь к директории
WP_LANG_DIR
на удаленной файловой системе. - wp_plugins_dir() — Возвращает путь к директории плагинов
WP_PLUGIN_DIR
на удаленной файловой системе. - wp_themes_dir( $theme = » ) — Возвращает путь к директории с темами на удаленной файловой системе. Можно передать конкретную тему для получения пути к её директории.
Заключение
Функция WP_Filesystem()
предоставляет мощный инструмент для работы с файлами в WordPress. Она позволяет абстрагироваться от конкретного метода работы с файловой системой (локальная, FTP или SSH) и использовать единый API для создания, удаления и манипуляции файлами. Это делает разработку плагинов и тем более гибкой и универсальной.