ファイル監視を設定する
初回取得: 基準を作成する
初回の実行では比較する相手がありません — 代わりに、この実行が基準を作成します: ファイルごとにチェックサム(PHP に用意されていれば sha256、なければ md5)と、サイズ、更新時刻、領域を記録します。処理は小分けで進み、初期設定では 1 ステップあたり最大 400 ファイルまたは 5 秒です。ウィンドウを閉じて、あとから続けることもできます。初回取得では総数をまだ誰も知らないため、パーセント表示はありません — 読み取ったファイル数と未処理のディレクトリ数が表示されます。先に大切なことを 1 つ: 監視は見つけたものをそのまま覚え、それが正しいものとみなします。設置の中身に確信が持てない場合は、先にファイル整合性(コアと WordPress.org の照合)とマルウェアスキャンを実行してください。移転や復元のあとは「基準を破棄」がきれいなやり方です: すべてのチェックサムと検出結果が消え、次の実行があらためて取得します。これは取り消せません。
チェックされるもの — されないもの
チェックの対象は WordPress ディレクトリから下のツリーです。ホスティング事業者の環境で wp-content やプラグインディレクトリが外側にある場合は、それも独立したルートとして加わり、表示では独自の接頭辞が付きます。設置より 1 階層上にある wp-config.php は、名前を指定した単独ファイルとして取り込まれ、各実行の最初に真っ先にチェックされます — 親ディレクトリそのものは意図的に走査しません。多くのホスティング事業者では、そこに別の設置やバックアップが置かれているためです。初期設定で除外されるのは、アップロードディレクトリと、組み込みの 15 のキャッシュ・一時ファイル・ログのパターンです(wp-content/cache、wp-content/upgrade、node_modules、.git、*.log など)。どちらのスイッチもオフにできますが、その場合は実行が長くなり、画像をアップロードするたびに検出結果が 1 件生まれます。独自のパターンは除外リストに追加します: 最大 100 件、1 件あたり最大 200 文字です。スラッシュを含まないパターンは、その名前の経路の区切りすべてに一致します。スラッシュを含むパターンはルートを起点に固定され、* は 1 つの区切りの中でだけ働きます。例として示された経路のすべてに一致するパターンは拒否されます — リストを見ただけでは分からないまま、監視を止めてしまうからです。登録の際には、現在の基準のうち何件のファイルがそれに該当するかが数えられて表示されます。読み取られないのは、サイズの上限を超えるファイル(初期設定 16 MB、1 〜 512 で設定可能)、読み取れないファイル、シンボリックリンクの先にあるものすべてです — これらは結果の中に個別の件数として並び、明確に「欠落」とはみなされません。
検出結果を読んで適用する
種類は 3 つあります: 変更、新規、欠落。1 ファイルにつき未処理の検出結果は最大 1 件がリストに並び、初回の検出、最後の検出、回数が表示されます。比較の相手は最後に承認された基準であり、前回の実行ではありません — そのため、適用するまで検出結果は残ったままになります。内容がひとりでにまた基準と一致した場合(更新の取り消し、ファイルの戻しなど)、その検出結果は消えます。報告された新規ファイルが再びなくなったときは、黙って削除するのではなく、経路とともに操作ログに書き込まれます。「基準に適用」は、何が起きるかを先に示し、そのうえで 500 件ずつのブロックで処理します: 変更されたファイルには新しいチェックサムが入り、新規のものは追加され、欠落したものは取り除かれます。ファイルそのものは何も変わりません — ただし古いチェックサムはそのあと失われるので、押す前に、説明のつかないものはすべて確認してください。記録用には、古いチェックサムと新しいチェックサムを含む最大 2000 件の未処理の検出結果を出す CSV エクスポートがあります。知っておくべき上限が 2 つあります: 未処理の検出結果が 3000 件を超えると、カウントは続きますが保存はされなくなります(画面にその旨が出ます)。また履歴には、適用済みの検出結果のうち最新の 500 件が残ります。中断された実行では欠落したファイルは判定されません — それには完全な実行が必要です。
要注意ファイルの即時通知
初期設定でオンです。ここでいう「要注意」は「重要」という意味ではなく、そのファイルを変更できる者は自分のコードを実行できる、あるいはアクセス情報に手が届く、という意味です。対象は wp-config.php、サーバー設定(.htaccess、.htpasswd、.user.ini、php.ini、web.config)、ドロップイン(db.php、object-cache.php、advanced-cache.php、sunrise.php とその仲間)、mu-plugins、そして本来 PHP ファイルがあってはならない場所にある PHP ファイルです: アップロードディレクトリ、WordPress のルート、そして plugins と themes を除く wp-content の中です。これらの通知は、実行の最後ではなく小分けの処理ごとの終わりに送られます — 大きな設置では、その間隔が数時間になることもあります。最短間隔は初期設定で 15 分です(0 〜 1440 で設定可能)。この間に増えた分はまとめられ、次の通知と一緒に送られるので、失われるものはありません。1 通の通知に載るエントリーは最大 200 件で、残りは件数として示されます。実行の終わりと中断時には、間隔に関係なく残りが送り切られます。送信の経路は一度、テスト通知で確かめてください: wp_mail() がメッセージを受け付けたのか拒否したのかを、はっきりと伝えます — 実際に配送されるかどうかを決めるのは、その先のサーバーです。独自のパターンを要注意として追加登録することもできます。その際、未処理の検出結果はただちに分類し直され、リストが 2 つの事実を示すことのないようにします。
自動実行とスケジュール
初期設定では、実行は自分で開始したときだけ走ります。自動実行をオンにすると、1 時間ごと、1 日 2 回、毎日(既定)、毎週から選べます。最初の実行時刻は意図的に 5 分先に置かれ、管理画面での作業の最中に実行が始まらないようにしています。計算の起点は前回の実行の開始時刻で、5 分の余裕を見ます — そうしないと、長い実行を重ねるたびに間隔がどんどん延びてしまいます。Cron は同じ小分けの処理を進め、未処理が残っている間は 30 秒ごとに次の予定を入れ直します。ブラウザーで自分が操作している最中は 120 秒待ち、横からハンドルを取ることはありません。同じジョブに担い手が 2 人入らないよう、応答のたびに受け渡されるトークンで排他します。ロックは 60 秒で切れるので、閉じられたブラウザーがジョブを永久に塞ぐことはありません。設置で DISABLE_WP_CRON が指定されている場合は、オンにしたときのメッセージが、wp-cron.php が外部から呼び出されるとき — つまりサーバー側の Cron ジョブが用意されているときにだけ実行が始まる、と伝えます。