LoginSignup
2
0

More than 5 years have passed since last update.

mt_fileinfoをみるとわかること

Last updated at Posted at 2017-12-24

これは Movable Type Advent Calendar 2017 24日目の記事です。
Data API にはじまり、MTAppjQuery に終わるという、今年も Movable Type 一筋の一年でしたが、みなさんはいかがでしたか。来年は MT7 への移行が熱くなりそうですね。

はじめに

最近、以下のことを相談されることがあったので、解決策につながる方法を紹介したいと思います。

  1. ブログ記事のベース名を変更した際に、古いベース名のファイルが残っているので探したい。
  2. 公開しているコンテンツの中で、Movable Type で出力しているものと、そうでないものを整理したい。

(1) はよく聞く話です。ブログ記事やウェブページのベース名は、タイトル欄に入力された文字列を元に自動生成されます。このベース名を、理解しやすい URL にするために変更する際、対象を公開したまま実行するため、元のベース名のファイルが残ってしまうというものです。

(2) は (1) の現象の他に、期間限定のプロモーションサイトやランディングページを FTP 等でアップロードしているサイトではよくある話ですね。

これらを解決するには、 Movable Type で出力したファイル実際のファイル を比較することになります。これを手助けしてくれるのが mt_fileinfo というテーブルです。

mt_fileinfo テーブルとは

mt_fileinfo テーブルは、Movable Type をインストールした際に生成されるテーブルの一つで、Movable Type が出力したファイルの情報を管理します。以下は、その代表的なものです。()内は、mt_fileinfo テーブル内のカラム名です。

  • 出力先のファイルパス(fileinfo_file_path)
  • 出力先の URL からウェブサイト・ブログのサイト URL 部を除いたもの(fileinfo_url)
  • ブログ ID(fileinfo_blog_id)
  • テンプレート ID(fileinfo_template_id)
  • エントリー ID(fileinfo_entry_id)
  • カテゴリー ID(fileinfo_category_id)
  • アーカイブ種別(fileinfo_archive_type)

mt_fileinfo テーブルの情報を取得する

私の環境では phpMyAdmin とか入れていないので、mysql コマンドの出力結果を、テキストファイルに保存しています。
mysql のシェル内で、以下を実行すると、ファイルの一覧を出力できそうです。

SELECT fileinfo_file_path FROM mt_fileinfo;

ですが、これでは不十分です。理由は、mt_fileinfo テーブルには 未公開・下書き のものもあるからです。

記事やウェブページの公開状態の確認

記事やウェブページの公開状態は、mt_entry テーブルの entry_status カラムの値で確認できます。entry_status の値は、以下のようになっています。

解説
1 未公開(原稿)
2 公開
3 未公開(承認待ち)
4 日時指定
5 未公開(スパム)
6 非公開(公開終了)

現在、公開されているものは、entry_status の値が 2 のものになります。

インデックス・テンプレートや他のアーカイブの公開状態の確認

インデックス・テンプレートや他のアーカイブの公開状態は、mt_template テーブルの template_build_type カラムの値で確認できます。

解説
0 公開しない
1 スタティック(既定)
2 手動
3 ダイナミック
4 公開キュー経由

現在、公開されているものは、template_build_type の値が 0 のものになります。

Movable Type が出力しているファイルの一覧の取得するには

整理すると、以下のようになります。

  • mt_fileinfo テーブルの fileinfo_file_path の値で、出力しているファイルの一覧ができる。
  • 記事やウェブページの公開状態を反映するには、mt_fileinfo テーブル内の fileinfo_entry_id の値と mt_entry テーブルの entry_id を連携させて、 entry_status の値が 2 のもの のみを抽出する。
  • インデックス・テンプレートや他のアーカイブの公開状態を反映するには、mt_fileinfo テーブル内の fileinfo_template_id の値と mt_template テーブルの template_id を連携させて、 template_build_type の値が 0 以外のもの のみを抽出する。

ここまでわかれば、あとは頑張るだけです。今回は、SQL 文で INNER JOIN や条件を指定せず、以下の SQL で出力された結果を EXCEL で VLOOKUP してマスターを作成しました。

SELECT fileinfo_file_path,fileinfo_blog_id,fileinfo_template_id,fileinfo_archive_type,fileinfo_entry_id FROM mt_fileinfo;
SELECT entry_id,entry_blog_id,entry_status FROM mt_entry;
SELECT template_id,template_blog_id,template_build_type FROM mt_template;

最後に、作成したマスターとウェブサーバーに直接アクセスして得たファイルの一覧を比較することで、欲しい結果が得られました。

まとめ

  • mt_fileinfo テーブルをはじめに幾つかのテーブルの情報を連携させると、Movable Type が出力したファイルの一覧ができる。
  • ウェブサーバーに直接アクセスして得たファイルの一覧と、VLOOKUP することで Movable Type が過去に生成したファイルの一覧ができる。
  • 作業を楽にするためには、プログラムが必要ですね。MT7 のリリースに間に合うように開発したいな。
2
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0