説明
WP_Filesystem_Base は、サーバー上のファイルを、権限を考慮して安全に読み書きするためのクラスです。WP_Filesystem() で初期化して使います。
基本構文
WP_Filesystem()
引数
get_contents( $file ):ファイルを読み込むput_contents( $file, $data ):ファイルに書き込むmkdir( $path ):ディレクトリを作るdelete( $path ):削除する
戻り値
グローバルの $wp_filesystem を使います。
使い方(サンプル)
global $wp_filesystem;
require_once ABSPATH . 'wp-admin/includes/file.php';
WP_Filesystem();
$text = $wp_filesystem->get_contents( $path );
注意点
- FTP情報が必要になる環境があります。
- 単純なファイル操作は、PHP標準関数で済むことも多いです。
実務での使いどころ
- WordPressの方法で、ファイルの読み書き・作成・削除を、行うとき(
global $wp_filesystem)。 - サーバーのファイルの所有者や、権限の違いを、吸収して、扱うとき。
よくあるミスと対処
WP_Filesystem()で、初期化する前に、$wp_filesystemを使っている。nullになる。WP_Filesystem()が失敗(false)しても、$wp_filesystemは設定済みのままになる。接続できていないのに使うと、定数FS_CHMOD_FILEが未定義で、エラーになる。WP_Filesystem()の戻り値で、判定する。- 管理画面の外(フロントやcron)で、必要なファイル(
wp-admin/includes/file.php)を、読み込んでいない。 - アップロードフォルダなど、単純なファイルの読み書きに、PHPの
file_put_contents()で足りる場面でも、複雑にしている。 - ファイルシステムの認証情報(FTPなど)が必要な環境を、考えていない。
NG例
global $wp_filesystem;
$wp_filesystem->put_contents( $path, $data ); // WP_Filesystem() で初期化していない
OK例
require_once ABSPATH . 'wp-admin/includes/file.php';
global $wp_filesystem;
if ( WP_Filesystem() ) {
$wp_filesystem->put_contents( $path, $data, FS_CHMOD_FILE );
}
// false のときは、認証情報(request_filesystem_credentials)が必要な環境
使い分け早見表
| やりたいこと | 使うもの |
|---|---|
| WordPressの方法で、ファイルを扱う | $wp_filesystem(WP_Filesystem_Base) |
| アップロードされたファイルを処理する | wp_handle_upload() |
| 単純なファイルの読み書き | PHPの file_get_contents() など |

コメント