Инициализация и подключение классов файловой системы в WordPress: WP_FILESYSTEM()

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.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *