エントリーのPHP化失敗してしまいぐちゃぐちゃになりそうだったが、バックアップから元に戻すことが出来た。しかし、レスポンスが上がるのであればどうしてもPHP化したい。
そこでちょっと実験してみた。いろいろやってみるとPHP化できそうなので、そのやり方を忘れないうちにメモしておこう。
まずはPHPが動いているか確認。これはサーバにこんなファイル(仮に名前をphptest.phpとしよう)をアップロードして、ブラウザからphptest.phpにアクセスしてみればわかる。
phptest.phpの中味
<?php echo phpinfo()?>
<?php echo phpinfo()?>がそのまま表示されるようであればPHPが入っていないので導入する。Vineの場合はいつもどおりapt-get install phpでOK。
最初どうしてもうまくいかず、これは文字コードに問題ありなんじゃないかと思って、/etc/php.iniの文字コード部分をMovableTypeの設定に書きかえた。これは必要ないかも知れないが、確かめていない。
mbstring.internal_encoding = EUC-JP
->
mbstring.internal_encoding = UTF-8
mbstring.http_input = auto
->
mbstring.http_input = UTF-8
mbstring.http_output = SJIS
->
mbstring.http_output = UTF-8
PHP化であるが、単にPHPに替えたいのであれば
1、管理画面で「Blogの設定」->「ウエブログの設定」->「アーカイブの設定」で拡張子をphpに設定
2、「Templateの編集」->「Main Index」->「出力ファイル名」のところをindex.htmlからindex.phpに変更
とすれば全てphpになる。だが、俺がやりたいのは単なるPHP化じゃなくて、エントリをモジュール化してリビルドを速く終わらせることが目的なので、もう一段踏み込んだ設定が必要だ。これは
MTのPHP化とページ分割や
あなたのmovabletype、重たくないですか?(テンプレートモジュール化)や
リビルドなんて怖くないを参考に進めた。要は本文だけを分離(モジュール化)しておいて切り貼りして使う感覚なのだが、全然うまくいかなかった。
色々試しているうちにモジュール化した後のエントリのinclude、つまりはパスの設定を思い切りミスしていることに気が付いたのだが…。ということで順を追って整理しておこう。
まずはエントリ本体をモジュール化するためのアーカイブ・テンプレートを新たに作成する。名前は適当でよろしい(Entry Body とか)。リンクするファイルはなし。中身は
<$MTEntryBody$>
これだけ書いたら保存して終わり。これでエントリ本文のみが出力されるテンプレートができますたというわけ。
次に、エントリが作成されたときに本文だけのモジュールもできるよう、エントリ作成時にこのEntry Bodyテンプレートが適用されるように設定する。エントリの最小単位はIndividual Entryなので、これが作成されるときにいっしょにエントリ本文だけ書き出してしまえということだな。
これは「BLOGの設定」->「アーカイブの設定」->「新しく追加」とやって、アーカイブの種類にIndividual、テンプレートに先ほど作成した「Entry Body」を選択して保存する。もしかしたら「取り消し」や「保存」のボタンが出てこないかもしれないが、あせらずTABキーを使え。そうするとアーカイブの設定のIndividualにEntry Bodyが追加されているはずだ。IndividualのテンプレートはIndividual Entry Archiveにしておくこと。Entry Bodyにチェックすると「最近のエントリ」などを表示させたとき本文しか出てこなくなってしまうから要注意。
さて、エントリ本文ならびにIndividualのファイル名であるが、あとからいろいろ整理したりしたい場合は少し工夫が必要だ。上記参考サイトは保存した日時を利用しているので、ここでも同じようにしてみる。
俺の場合は
エントリ本文(例) 200412/03-45_body.html
Individual(例) 200412/03-45.php
という風にした。これは「BLOGの設定」->「アーカイブの設定」のところで、「アーカイブ・ファイルのテンプレート」で指定してやる。
エントリ本文(Entry Body)->
<$MTArchiveDate format="%Y%m/%d-%H%M"$>_body.html
Individual Archives->
<$MTArchiveDate format="%Y%m/%d-%H%M"$>_php
これで上記例のような形式でarchivesディレクトリの中に保存されていく。
さて、問題のモジュール化したエントリ本文をどのように使うかだが、これはMain Index、Category Archive、Date-Based Archive、Individual Entry Archiveなどの中に使われてる
<$MTEntryBody$>をphpのinclude文にて埋め込みするように指定する。つまり、
<$MTEntryBody$>を
<?php
include"./<$MTArchiveDate format="%Y%m/%d-%H%M"$>_body.html";
?>
といった感じに変更していく。ここで思いきり注意が必要なのは、include内で指定するディレクトリは、入れ子させるphpファイルからの相対パスもしくはwebの絶対パス(つまりDocumentRoot から)で記述しなくちゃいけないということ。俺は相対パスで指定してめちゃくちゃになっちゃった(めちゃくちゃになった大きな理由は別にあるが、それはナイショ)のだが、上記の例ではIndividualやCategoryアーカイブ、Date-Basedアーカイブとエントリ本文は同じディレクトリ内にあるから./<$MTArchiveDate format="%Y%m/%d-%H%M"$>_body.html、Main Indexはひとつ上のディレクトリのあるから./archives/<$MTArchiveDate format="%Y%m/%d-%H%M"$>_body.html"としてやる必要がある。
絶対パスで指定してやったほうがバカチョンで絶対に簡単だ。絶対パスの場合は、Vineでは/home/httpd/html・・・となっているはずなので、/homeからずっとたどって書いていけばいい。
さて、これで本文のモジュール化ができた。しかしまだもうひとつ問題が…それはphpに変換してしまうと、検索エンジンやTBなどから飛んできた人が目的のページにたどり着けなくなってしまうことだ。これは.htaccessにて回避させるようにする。まぁ、移行してしまえばその後は新しいもので保存されていくわけで、移行時にぱぱっと作ってしまえばそれでおしまいかな。
これは新規インデックス・テンプレートを作って作成させると簡単とのことなので早速やってみた。テンプレートの名前は「htaccess index」、出力ファイル名はそのものずばり「.htaccess」とした。テンプレートの中身は以下のとおり。
<MTArchiveList archive_type="Individual">Redirect permanent /ほげ/archives/<MTEntries><$MTEntryID pad="1"$>.html</MTEntries> <$MTBlogURL$>ほげ/archives/<$MTArchiveDate format="%Y%m/%d-%H%M"$>.php</MTArchiveList>
この文は1行に1構文出力させなくてはならないので、途中に改行などは入れてはいけない。
これで再構築すればOK(なはず…)。
最後に、Vineの場合は.htaccessが許可になっていないので、/etc/httpd/conf/httpd.confを変更する必要がある。
#
# This may also be "None", "All", or any combination of "Indexes",
# "Includes", "FollowSymLinks", "ExecCGI", or "MultiViews".
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
Options Indexes Includes FollowSymLinks MultiViews
#
# This controls which options the .htaccess files in directories can
# override. Can also be "All", or any combination of "Options", "FileInfo",
# "AuthConfig", and "Limit"
#
AllowOverride None
#
# Controls who can get stuff from this server.
#
Order allow,deny
Allow from all
</Directory>
#
#php化に伴う.htaccessを許可する
#
<Directory /home/httpd/html/ほげ>
Options FollowSymLinks
AllowOverride All
</Directory>
変更後/etc/rc.d/init.d/httpd restartでapacheを再起動させてやれば終了だ。ふう、疲れた。明日にでもPHP化してみようか。