WP_Filesystem()
Создает объект работы с файлами WordPress. Созданный объект сохраняется в переменную global $wp_filesystem.
Что делает функция:
- Функция находит подходящий метод взаимодействия с файлами с помощью get_filesystem_method().
- Подключает все необходимые php файлы WordPress, которые нужны для работы найденного метода.
- На основе найденного метода взаимодействия, создает объект для работы с файлами и записывает его в переменную
global $wp_filesystem
. Её затем мы будем использовать. - Устанавливает константы
FS_CHMOD_DIR
иFS_CHMOD_FILE
, если они не были установлены ранее в wp-config.php.
Если в качестве метода взаимодействия был определен протокол требующий подключения, например, ssh2
, ftpext
, или ftpsockets
, то функция пытается подключиться. Если подключиться не удалось вернет false.
Плагины могут добавлять свои классы для взаимодействия с файлами, с помощью фильтра filesystem_method_file. Фильтр должен вернуть путь к файлу класса.
Примеры таких классов:
- WP_Filesystem_Direct{}
- WP_Filesystem_FTPext{}
- WP_Filesystem_ftpsockets{}
- WP_Filesystem_Base{} - базовый класс от которого наследуются все классы.
Хуки из функции
Возвращает
true|false|null
.
True
при успехе, когда подключение к файловой системе прошло успешно.false
при неудаче, например, не удалось подключиться по ФТП. Или не найден метод - get_filesystem_method() вернула пустоту.null
, если файл класса метода не существует.
Использование
// require_once ABSPATH . 'wp-admin/includes/file.php'; WP_Filesystem( $args, $context, $allow_relaxed_file_ownership );
- $args(массив|false)
- Параметры подключения, Они передаются напрямую в класс
WP_Filesystem_*( $args )
.
По умолчанию: false - предустановки - $context(строка|false)
- Контекст для get_filesystem_method().
Полный путь к директории, которая проверяется на возможность записи. По умолчанию $context = WP_CONTENT_DIR.
По умолчанию: false - WP_CONTENT_DIR - $allow_relaxed_file_ownership(true|false)
Разрешить ли группе/миру возможность записи файлов. Напрямую передается в функцию get_filesystem_method().
При
true
, будет использован класс WP_Filesystem_Direct{}, если жестко не указан метод взаимодействия с файлами через константу FS_METHOD и папка $context позволяет записывать файлы текущему PHP процессу.При
false
, метод WP_Filesystem_Direct{} будет использоваться только если PHP процесс является владельцем файлов. А конкретнее владелец файла/wp-admin/includes/file.php
и владелец временно-созданного файла в папке $context должны совпадать.По умолчанию: 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 ); // и т.д.
Список полезных методов:
- abspath( ) — Returns the path on the remote filesystem of ABSPATH.
- copy( $source, $destination, $overwrite, $mode ) — Copies a file.
- cwd( ) — Gets the current working directory.
- delete( $file, $recursive, $type ) — Deletes a file or directory.
- dirlist( $path, $include_hidden, $recursive ) — Gets details for files in a directory or a specific file.
- exists( $path ) — Checks if a file or directory exists.
- get_contents( $file ) — Reads entire file into a string.
- get_contents_array( $file ) — Reads entire file into an array.
- is_binary( $text ) — Determines if the string provided contains binary characters.
- is_dir( $path ) — Checks if resource is a directory.
- is_file( $file ) — Checks if resource is a file.
- is_readable( $file ) — Checks if a file is readable.
- is_writable( $path ) — Checks if a file or directory is writable.
- mkdir( $path, $chmod, $chown, $chgrp ) — Creates a directory.
- move( $source, $destination, $overwrite ) — Moves a file.
- mtime( $file ) — Gets the file modification time.
- put_contents( $file, $contents, $mode ) — Writes a string to a file.
- rmdir( $path, $recursive ) — Deletes a directory.
- search_for_folder( $folder, $base, $loop ) — Locates a folder on the remote filesystem.
- size( $file ) — Gets the file size (in bytes).
- touch( $file, $time, $atime ) — Sets the access and modification times of a file.
- wp_content_dir( ) — Returns the path on the remote filesystem of WP_CONTENT_DIR.
- wp_lang_dir( ) — Returns the path on the remote filesystem of WP_LANG_DIR.
- wp_plugins_dir( ) — Returns the path on the remote filesystem of WP_PLUGIN_DIR.
- wp_themes_dir( $theme ) — Returns the path on the remote filesystem of the Themes Directory.
#2 Каждый вызов создает новый экземпляр
Каждый вызов WP_Filesystem() перезаписывает переменную global $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
Заметки
- Global. WP_Filesystem_Base. $wp_filesystem WordPress filesystem subclass.
Список изменений
С версии 2.5.0 | Введена. |