Movable Type 4 の PHP モジュール化
インデックステンプレートを用いて、「最近のブログ記事」や「カテゴリーリスト」などのサイドバーのリスト類について、SSI(PHP)によるモジュール化を行なう方法を紹介します。
このエントリーは、Movable Type 3 の記事「Movable Type の PHP モジュール化の仕組みについて(その3:変更方法)」を Movable Type 4 向けに全面的に書き直したものです。Movable Type 4 では、サイドバーのリスト類がテンプレートからウィジェットに移動されているので、その辺りも考慮した内容にしています。
モジュール化のメリットについては、下記のエントリーを参照してください。
なお、各ページは事前に PHP 化を行っていることを前提としています。PHP化の方法については下記の記事を参照願います。
1.ウィジェットテンプレートの変更
Movable Type 4 では、サイドバーのリスト類はウィジェットに登録されているので、まずウィジェットテンプレートを変更します。以下、「最近のブログ記事」の場合を例に説明します。
ブログ管理画面の「デザイン」→「ウィジェット」をクリック。

「最近のブログ記事」をクリック。

テンプレートの内容を全選択してコピーします。コピーした内容はメモ帳などにペーストしておいてください。

テンプレートの内容を次の内容に書き換えます。
<?php readfile("<$mt:BlogSitePath$>recent_entries.html"); ?>
青色の部分がモジュールとして呼び出すファイル名になります。ファイル名は何でもかまいませんが、ここでは recent_entries.html で作業を進めます。
書き換えた後の画面は次のようになります。

書き換えたら「保存」をクリックします。
2.モジュールの作成
次に、モジュールとなる方のテンプレートを作成します。
ブログ管理画面の「デザイン」→「テンプレート」をクリック。

インデックステンプレートの「新しいインデックス・テンプレートを作る」をクリック。

インデックステンプレート作成画面で下記の項目を設定します。
- テンプレートの名前:最近のブログ記事
- 出力ファイル名:recent_entries.html
- テンプレートの内容:1項の作業でウィジェットからコピーテンプレートの内容をペースト
「出力ファイル名」は、このテンプレートを再構築した時のファイル名となります。このファイル名は、1項で設定した青色部分、
<?php readfile("<$mt:BlogSitePath$>recent_entries.html"); ?>
と必ず一致するようにしてください。
各項目を設定した後の画面は次のようになります。

あとは「保存」をクリックして、「このテンプレートを再構築する」のリンクをクリックし、作成したテンプレートを再構築してください。

あとは、全体を再構築して、リストが正常に表示されることを確認してください。
3.「最近のブログ記事」以外のリストをモジュールで利用する場合
モジュール化したいリストについて、1~2項の手順を繰り返します。その際、出力するファイル名を次のように変更してください。
- 最近のコメント:recent_comments.html
- 最近のコメント:recent_trackbacks.html
- カテゴリーリスト:categories.html
- 月別アーカイブリスト:monthly.html
必ずこの名称にしないといけないわけではなく、1項で設定した青色部分のファイル名と、2項で設定した出力ファイル名が一致していればOKです。
また、リスト類以外の検索フォームなど、テンプレートタグを使っているものについても、モジュール化しておけば再構築の負荷を減らすことができます。
4.システムテンプレートでもモジュールを利用する場合
「コメントプレビュー」や「検索結果」などのシステムテンプレートから、作成したモジュールを呼び出すときは、「最近のブログ記事」の場合、1項のウィジェットの内容を次のように修正します。
<mt:If name="system_template">
<$mt:Include file="recent_entries.html"$>
<mt:Else>
<?php readfile("<$mt:BlogSitePath$>recent_entries.html"); ?>
</mt:If>
青色部分のファイル名が一致するようにしてください。
以上です。
Movable Type 4 の PHP化
Movable Type 4 で出力するページをPHP化する(=拡張子を .php にする)カスタマイズを紹介します。
Movable Type には何種類かのテンプレートがあり、PHP化の対象は「インデックステンプレート」と「アーカイブテンプレート」の2つです。
このエントリーは、Movable Type 3 の記事「Movable Type の PHP化(その1)」をMovable Type 4 向けに修正したものです。
1.インデックステンプレートの拡張子を変更する
デフォルトテンプレートの場合、インデックステンプレートでPHP化を行なうのは「メインページ」と「アーカイブインデックス」の2つです。ここではメインページをサンプルに説明します。
ブログ管理画面の「デザイン」→「テンプレート」をクリック。

「メインページ」をクリック。

「テンプレートの設定」をクリック。

「出力ファイル」を index.html から index.php に変更します。変更後は「保存」をクリックします。

アーカイブページもメインページと同様の手順で archives.html から archives.php に変更します。

2.アーカイブテンプレートの拡張子を変更する
ブログ管理画面の「設定」→「公開」をクリックします。

「アーカイブオプション」の「ファイルの拡張子」の内容を html から php に書き換え(ピリオドは不要)、下にある「変更を保存」をクリックします。

この設定を行なうことで、MovableType の全てのアーカイブページの拡張子は .php に変更されます。
※「カスタム」設定を行なっていない場合、以下の内容はスキップして3項の作業に進んでください。
なお、アーカイブテンプレートのパスを「カスタム」設定で拡張子に .html を設定している場合、本項の設定が反映されません。
「カスタム」以外を選択している場合(2項の設定で拡張子が自動的にphpに変更)

「カスタム」を選択して、拡張子を直接設定している場合

上記のように直接設定している場合は、パスに記述した拡張子 .html を %x に書き換えます。2項の設定により、%x は自動的に .php に読み替えられてページを出力します(このフィールドの %x が .php に書き変わるわけではありません)。

3.XML宣言の修正
※デフォルトテンプレートではこの作業は不要です。
ページの先頭に、
<?xml version="1.0" encoding="<$MTPublishCharset$>"?>
がある場合、拡張子を .php にして表示すると、ページが真っ白になるか
Parse error: parse error, unexpected T_STRING in [...] on line 1
というようなエラーが表示されます。これはXML宣言がPHPとして誤解釈されてしまうための事象です。
これを回避するには、ご利用のテンプレートに記述されている XML宣言を削除するか、
<? echo('<?xml version="1.0" encoding="<$MTPublishCharset$>"?>') ?>
とPHPが解釈可能なフォーマットに変更してください。どのテンプレートに書かれているか分からない場合は、管理画面の「デザイン」→「テンプレート」でテンプレート一覧画面を開いたときに右上にある検索フィールドで「xml version」で検索するとよいでしょう。

なお、XML 宣言を各ページで利用している場合、システムテンプレートで不具合が発生する可能性があります。不具合の内容や対処の詳細については下記の記事をご覧ください。
4.ファイル・ディレクトリのパーミッション変更
※本設定の要否や設定内容はサーバによって異なります。
PHPファイルが実行ファイルとして動作するように、再構築で生成されるディレクトリおよびファイルのパーミッションを変更する必要があります。パーミッションを変更するには Movable Type をインストールしたディレクトリにある mt-config.cgi をダウンロードし、任意のエディタで編集します。
「さくらのインターネット」の場合、mt-config.cgi の最後に、下記の3行を追加します。
HTMLUmask 0022
DirUmask 0022
HTMLPerms 0777
編集後、mt-config.cgi を元のディレクトリに上書きアップロードします。
なお、この設定項目は一意に決まるものではなく、レンタルサーバによって設定値が異なる可能性があります。あるいは、本項の変更自体が不要な場合もあります。
HTMLPerms は、perl の sysopen の第4パラメータ、つまり PHP ファイル作成時のファイルパーミッションを設定する環境変数です。
XXUmask は、Movable Type 内部から Linux の umask コマンドを実行する時の引数となります。HTMLUmask はファイル作成時のマスク、DirUmask はディレクトリ作成時のマスクです。umask の機能については下記を参照ください。
5.再構築とページ確認
全体を再構築します。再構築が完了したら PHP化されたページが正常に表示されることを確認してください。この時点では .html のページが残っているので、メインページであればURLの末尾に index.php を付与して、PHPのファイルに直接アクセスしてください。
6.ファイルのリダイレクト
※リダイレクトが不要な場合はこの作業をスキップしてください。
各アーカイブページについて、.htaccess を用いて旧ファイル(html)から新ファイル(php)へのリダイレクトを行います。リダイレクトを利用すれば、外部からリンクされてしまっている旧ファイルへのリンクを、新ファイルへ転送することができます。
設定の詳細は「.htaccess によるリダイレクト」を参照ください。
7.不要ファイルの削除
ブログディレクトリ(メインページがあるディレクトリ)およびその配下にある .html のファイルを削除します。Movable Type には拡張子の変更により .html のファイルを削除する機能はありませんので、FTPツールあるいは TeraTerm 等を利用し、ファイルを手動で削除します。
.html のファイルを削除する理由は次の通りです。
HTTPサーバの設定にもよりますが、一般的にURLが "/" で終わる場合、サーバは最初に、そのディレクトリの index.html を探すようになっています。当サイトの場合、
http://www.koikikukan.com/
をブラウザに指定して実行した場合、HTTPサーバは
http://www.koikikukan.com/index.html
を一番最初に検索します。index.html が存在しない場合は次候補の index.htm や index.php 等を検索する、という仕組みになっています。
したがって、拡張子を変更しただけでは新しく作った index.php にアクセスされない可能性があります。「可能性がある」と書いたのは、URLに index.php まで指定すれば当然アクセスできるからです。
archives.html については、実際にはURLに archives.php まで設定するためアクセス上は問題ありませんが、削除することを推奨します。*1
参考までに、この「ファイルを検索する」という設定は Apache HTTP サーバの「DirectoryIndex ディレクティブ」で行います。
このディレクティブに記述されたファイルがひとつもみつからない場合はそのディレクトリのファイルリストが表示される、という仕組みになっています。
アーカイブページの .html ファイルの削除については、「アーカイブの設定」の有無によって、アーカイブディレクトリの位置が異なります。
7.1 「アーカイブをサイトパスとは別のパスで公開する」を行っている場合
ブログ管理画面の「設定」→「公開」にある「アーカイブをサイトパスとは別のパスで公開する」をチェックしていれば、アーカイブディレクトリを丸ごと削除しても構いません(ただしPHPファイルも消えてしまうので、すぐに再構築してください)。
ただし画像ファイルなどをこのでぃれっクトリにアップロードしている場合はこの作業を行なわず、手作業で .html ファイルを削除してください。
7.2 「アーカイブをサイトパスとは別のパスで公開する」を行っていない場合
「アーカイブをサイトパスとは別のパスで公開する」をチェックしていない場合は、ブログ管理画面の「設定」→「公開」にある「サイトパス」配下にアーカイブ用のディレクトリ(下記)が作成されているので、そのディレクトリを丸ごと削除しても構いません(ただしPHPファイルも消えてしまうので、すぐに再構築してください)。
アーカイブごとにディレクトリ名は概ね次のようになります。なお、「アーカイブマッピング」の設定によってディレクトリ名は異なるので参考程度にしてください。
- 年別/月別/週別/日別アーカイブ:「年(「2009」等)」ディレクトリ
- カテゴリ(+日付含む)アーカイブ:「catX」ディレクトリ
- ユーザー(+日付含む)アーカイブ:「author」ディレクトリ
ディレクトリを丸ごと削除する場合、削除するディレクトリ配下に手動でアップロードしているようなファイルがないことを確認してから行なってください。
*1:旧ファイルを削除する理由は、もし削除しなければ同じ内容のファイルが2つ存在することになります。内部リンクから旧ファイルへのアクセスがなくても、外部からのリンク等が残っている場合、検索エンジンのクロール対象となり、ペナルティを受ける可能性があるためです。
Movable Type 4 で PHP 化する時の注意事項
Movable Type 4.0~4.1 では、「ヘッダー」「フッター」「サイドバー」等、各ページで共通的に使える部分を「テンプレートモジュール」として定義しているので、一ヶ所を修正して再構築すれば全ページに反映されるという、いわゆる「保守性」が向上しました。
しかし、PHP 化を行っている場合、「ヘッダー」テンプレートモジュールに PHP スクリプトが記述されていると、PHP 化の対象とならない「システムテンプレート(コメントプレビュー/コメント完了/検索結果)」にも PHP スクリプトが表示されてしまうため、期待しない表示になるケースがあります。
以下、システムテンプレートで PHP スクリプトを表示しない回避策を示します。
1.基本
PHP スクリプト全体を、下記のように MTUnless タグで括ります。
<MTUnless name="system_template">
:
[PHP スクリプト]
:
</MTUnless>
とする必要があります。name 属性の system_template はお分かりのようにシステムテンプレートであることを示す変数で、この条件を満たさない場合、つまりシステムテンプレートでない場合のみ、MTUnless タグのブロックを実行します。
代表的な例として、ヘッダの先頭(=ページの先頭)に
<? php echo('<?xml version="1.0" encoding="utf-8"?>'); ? >
がある場合は、
<MTUnless name="system_template">
<? php echo('<?xml version="1.0" encoding="utf-8"?>'); ? >
</MTUnless>
としてください。
注:実際に使用する場合は、リストの改行をすべて除去して1行にしてください。
2.応用
PHPスクリプトの内部に、システムテンプレートでも表示させたい内容がある場合は、MTUnless タグを PHP スクリプトに部分的に適用します。
例えば、1項の XML 宣言の対処では、システムテンプレートに XML 宣言が表示されません。これを表示させたい場合は次の2つの方法があります。
2.1 PHP スクリプトを部分的に MTUnless タグで括る
システムテンプレートで実行させたくない部分だけを MTUnless タグで括ります。
<MTUnless name="system_template">
<? php echo('
</MTUnless>
<?xml version="1.0" encoding="utf-8"?>
<MTUnless name="system_template">
'); ? >
</MTUnless>
注:実際に使用する場合は、リストの改行をすべて除去して1行にしてください。
2.2 MTElse タグを利用する
MTElse タグを利用して、MTElse タグブロック内部には、システムテンプレートで表示させたい内容を再掲します。
<MTUnless name="system_template">
<? php echo('<?xml version="1.0" encoding="utf-8"?>'); ? >
<MTElse>
<?xml version="1.0" encoding="utf-8"?>
</MTUnless>
注:実際に使用する場合は、リストの改行をすべて除去して1行にしてください。
3.注意事項
system_template という変数は、各システムテンプレートの先頭に
<MTSetVar name="system_template" value="1">
という形で記述されているものを利用しています。
独自にテンプレートを作成されている場合は、各システムテンプレートの先頭に上記の MTSetVar タグが記述されていることを確認し、記述されていない場合は追加してください。
2008.10.07
バージョンを 4.0~4.1 に限定しました。
Movable Type 4 の PHP 化で XML 宣言を自動的に切り替える
PHP化を行う時にいつも面倒に思うのは、1行目の XML 宣言を PHP スクリプトに変更するか、削除しなければならいという手間が発生することです。
Movable Type 4 では MTIf タグで色々制御できるようになったので、PHP化、つまり拡張子を .html から .php に切り替えた時(あるいはその逆)に、XML 宣言を書き換えなくて良い MT タグ構成を考えてみました。
注:デフォルトテンプレートには XML 宣言は記述されていないので、XML 宣言を記述した状態を前提にしています。
1.カスタマイズ
テンプレートモジュールの「ヘッダー」の先頭に下記の青色部分を追加すればOKです。
注:分かりやすいように改行していますが、使用時は青色部分の改行・空白を削除して1行に丸めてください。
<MTIf name="entry_template">
<MTSetVarBlock name="extension"><$MTBlogFileExtension$></MTSetVarBlock>
<MTElse>
<MTIf name="main_index">
<MTSetVarBlock name="extension"><$MTIndexBasename extension="1"$></MTSetVarBlock>
<MTElse>
<MTSetVarBlock name="extension"><$MTBlogFileExtension$></MTSetVarBlock>
</MTIf>
</MTIf>
<MTIf name="system_template">
<MTSetVarBlock name="extension">html</MTSetVarBlock>
</MTIf>
<MTIf name="extension" like=".php"><?php echo('<?xml version="1.0" encoding="utf-8"?>'); ?><MTElse><?xml version="1.0" encoding="utf-8"?></MTIf>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" id="sixapart-standard">
<head>
ウェブページにも対応させるのであれば、ウェブページテンプレートに
<MTSetVar name="page_template" value="1">
を追加して、ヘッダに下記の青色部分を追加すればOKです。
<MTIf name="entry_template">
<MTSetVarBlock name="extension"><$MTBlogFileExtension$></MTSetVarBlock>
<MTElse>
<MTIf name="main_index">
<MTSetVarBlock name="extension"><$MTIndexBasename extension="1"$></MTSetVarBlock>
<MTElse>
<MTIf name="page_index">
<MTSetVarBlock name="extension"><$MTPageBasename extension="1"$></MTSetVarBlock>
<MTElse>
<MTSetVarBlock name="extension"><$MTBlogFileExtension$></MTSetVarBlock>
</MTIf>
</MTIf>
</MTIf>
<MTIf name="system_template">
<MTSetVarBlock name="extension">html</MTSetVarBlock>
</MTIf>
<MTIf name="extension" like=".php"><?php echo('<?xml version="1.0" encoding="utf-8"?>'); ?><MTElse><?xml version="1.0" encoding="utf-8"?></MTIf>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" id="sixapart-standard">
<head>
2.テンプレート修正
「追加部分を1行に丸めてください」と書きましたが、理由は、XML宣言が文書の1行目になければならないためです。
が現状のデフォルトテンプレート(XML宣言なし)では DOCTYPE 宣言が文書の1行目に表示されません(数行空きます)。
例えば、インデックスページではヘッダ情報を取得 MTInclude タグの前に MTSetVar タグが記述されており(下記赤色)、タグの末尾にある改行がそのままページに反映されてしまうためです。
<MTSetVar name="body_class" value="mt-main-index">
<MTSetVar name="main_template" value="1">
<MTSetVar name="main_index" value="1">
<MTSetVar name="sidebar" value="1">
<MTSetVar name="module_recent_entries" value="1">
<MTSetVar name="module_category_archives" value="1">
<MTSetVar name="module_author_archives" value="1">
<MTSetVar name="module_monthly_archives" value="1">
<$MTInclude module="ヘッダー"$>
かといって、MTSetVar を MTInclude の後に移動すると、ヘッダで MTIf を用いた判定処理ができなくなります。
ということで、先程と同様、これらも MTSetVar タグの改行を取り除き、MTInclude タグを含めて1行に丸めてください(視認性は落ちます)。他のアーカイブテンプレートも同様です。
3.注意事項
アーカイブインデックス(archievs.html/archives.php)の判断はできていません。インデックステンプレートの拡張子の判断には MTIndexBasename を用いていますが、これはメインページのファイル名しか取得されないためです。
4.その他
アーカイブの拡張子を php にすると、ウェブページは .html と .php の両方が選択できるようです。が、ウェブページ新規作成画面の出力ファイル名には php しか表示されません(フィードバック済)。
2007.09.18
リストに extension="1" を追加しました。
2007.10.28
システムテンプレートに対する考慮漏れを対処しました。
Movable Type の PHP化(その2:.html のままPHPを有効にする)
Movable Type の PHP化(その1)では拡張子を変更する方法を説明しましたが、このエントリーでは拡張子を変更せず、html のままPHP化を行うカスタマイズを紹介します。
このカスタマイズを行えば、モジュール化やページ分割等を、拡張子の変更なしで利用できるようになります。
1年以上前、自宅サーバで運営している時にこのテクニックを知ったのですが、.htaccess を利用すればレンタルサーバでも可能であることに最近気がつきました。
ここでは、
- AddType ディレクティブによる設定
- ForceType ディレクティブによる設定
- AddHandler ディレクティブと Action ディレクティブによる設定
の3つの方法を紹介します。
基本的には1項の設定で動作するはずですが、さくらインターネットでは3項の方法でしか有効になりませんでした。4項以降の作業は1?3項共通です。
なお本カスタマイズは全てのレンタルサーバで動作を保証するものではありません。予めご了承ください。
1.AddType ディレクティブによる設定
.htaccess を作成し、下記の内容を記述します。
AddType application/x-httpd-php .html
自宅サーバや、レンタルサーバで httpd.conf を直接編集できる場合は、下記の青色部分を追加します。
AddType application/x-httpd-php .php .html
これは、拡張子が html のファイルのMIMEタイプ(擬似MIMEタイプ)を application/x-httpd-php とし、HTTPサーバが php として扱えるようにするための設定です。
設定・保存後、.htaccess はトップディレクトリ(index.html のあるディレクトリ)にアップロードしてください。すでに .htaccess がある場合は上記の設定を追加してください。
2.ForceType ディレクティブによる設定
.htaccess を作成し、下記の内容を記述します。
<FilesMatch "html$">
ForceType application/x-httpd-php
</FilesMatch>
3.AddHandler ディレクティブと Action ディレクティブによる設定
さくらインターネットでは1項の設定が有効になりません。ネットを検索したところ、AddHandler ディレクティブと Action ディレクティブによる方法で実現できることが判明しました。
参考サイトは下記です。ありがとうございました。
以下、設定手順です。
3.1 php のコピーとリネーム
/usr/local/bin/php を自ブログのディレクトリに、php.cgi という名前でコピーします。FTPツールであれば /usr/local/bin でアクセスして、一覧の中にある php を一旦ご自身のPCにダウンロードし、それからご自身のブログのトップディレクトリにアップロードし、php.cgi にリネームします。アップロード後は属性を705または755に変更します。
このファイルは /home/~/www 直下にアップロードしても大丈夫と思いますが、ブログのトップディレクトリが www 直下でない場合、例えば hogehoge というディレクトリがある場合は、hogehoge 配下にアップロードしてください。
3.2 .htaccess の設定
.htaccess に下記の設定を記述します。
AddHandler myphp-script .html
Action myphp-script /php.cgi
このファイルは 2.1項で配置した php.cgi と同じディレクトリに配置してください。
実験したところ、Action ディレクティブの /php.cgi という記述は .htaccess と同じディレクトリにある php.cgi を参照するようです。ということで、いずれのファイルもブログのトップディレクトリに配置すると良いでしょう。
3.1項の説明で、php.cgi を hogehoge というディレクトリアップロードした場合は、.htaccess に下記の設定を記述します。
AddHandler myphp-script .html
Action myphp-script /hogehoge/php.cgi
4.ファイル・ディレクトリのパーミッション変更
html ファイルが実行ファイルとして動作するように、再構築で生成されるディレクトリおよびファイルのパーミッションを変更します。
なお、3項のさくらインターネットの場合では、パーミッションの変更なしで動作したことを付け加えておきます。
Movable Type 3.3 以降の場合であれば、例えば mt-config.cgi に下記の3行を追加します。
HTMLUmask 0022
DirUmask 0022
HTMLPerms 0777
3.2 の場合は、下記のように mt-config.cgi に設定項目がコメントアウトされて表示されています。
# When creating files and directories, Movable Type uses umask settings to
# control the permissions set on the files. The default settings for file
# creation (HTMLUmask, DBUmask, and UploadUmask) are 0111; for directory
# creation (DirUmask), the default is 0000. You should not change these
# settings unless you are running MT under cgiwrap or suexec, or some other
# scenario where the MT application runs as you; in addition, you should not
# change these settings unless you know what they mean, and what they do.
#
# DBUmask 0022
# HTMLUmask 0022
# UploadUmask 0022
# DirUmask 0022
#
#
# In addition to controlling permissions via umask settings, you can also
# use the HTMLPerms and UploadPerms settings to control the default
# permissions for files created by the system (either as output files or
# uploaded files). The only real use of this is to turn on the executable bit
# of files created by the system--for example, if MT is generating PHP files
# that need to have the executable bit turned on, you could set HTMLPerms
# to 0777. The default is 0666. You should not change these settings unless
# you know what they mean, and what they do.
#
# HTMLPerms 0777
# UploadPerms 0777
これを、設定が必要な行の先頭にある「#」と半角空白を削除して、先と同じ内容に修正してください。
# When creating files and directories, Movable Type uses umask settings to
# control the permissions set on the files. The default settings for file
# creation (HTMLUmask, DBUmask, and UploadUmask) are 0111; for directory
# creation (DirUmask), the default is 0000. You should not change these
# settings unless you are running MT under cgiwrap or suexec, or some other
# scenario where the MT application runs as you; in addition, you should not
# change these settings unless you know what they mean, and what they do.
#
# DBUmask 0022
HTMLUmask 0022
# UploadUmask 0022
DirUmask 0022
#
#
# In addition to controlling permissions via umask settings, you can also
# use the HTMLPerms and UploadPerms settings to control the default
# permissions for files created by the system (either as output files or
# uploaded files). The only real use of this is to turn on the executable bit
# of files created by the system--for example, if MT is generating PHP files
# that need to have the executable bit turned on, you could set HTMLPerms
# to 0777. The default is 0666. You should not change these settings unless
# you know what they mean, and what they do.
#
HTMLPerms 0777
# UploadPerms 0777
なおこの設定項目は一意に決められるものではなく、レンタルサーバによって設定値が異なる可能性があります(上記はさくらインターネット+MySQLの場合)。また DBUmask 0022 が必要な場合もありますのでご注意ください。
HTMLPerms は、perl の sysopen の第4パラメータ、つまりファイル作成時のパーミッションとなります。
XXUmask は、Movable Type 内部から Linux の umask コマンドを実行する時の引数となります。umask の機能については下記を参照ください。
5.テスト
下記の1行を記述した任意のHTMLファイル(test.html 等)を作成します。
<?php phpinfo(); ?>
これをブログのトップディレクトリにアップロードしてアクセスしてみてください。下記のように表示が出れば成功です。

2006.10.27
3項の php のパスが誤っていましたので修正しました。
2008.08.03
3.2項の説明を追記しました。
Movable Type の PHP化(その1)
Movable Type をPHP化するカスタマイズです。PHP化には何通りかの方法があり、このエントリーでは拡張子を html から php に変更して、PHPを利用できるようにする方法を紹介します。
PHP化を行うことで、モジュール化やページ分割ができるようになります。
Movable Type には何種類かのテンプレートがあります。その中で、PHP化の対象は「インデックス・テンプレート」と「アーカイブ・テンプレート」の2つで、それぞれの拡張子を変更する方法を説明します。
1.インデックス・テンプレートの拡張子を変更する
インデックス・テンプレートでPHP化をするのは「メインページ」と「アーカイブページ」の2つです。ここではメインページをサンプルに説明します。
1.1 拡張子の変更
ブログ管理画面の左にある「テンプレート」クリックします。 |
表示されたページにインデックステンプレートの一覧が表示されます。このリストの右側にファイル名が表示されており、メインページのファイル名が「index.html」であることが分かります。
ここでは「メインページ」のリンクをクリックします。

次ページで表示された「出力ファイル名」欄が下のように index.html になっています。 |
これを index.php に変更し、「保存」あるいは「保存と再構築」をクリックします。 |
アーカイブページも同様に archives.html から archives.php に変更します。
変更した後、アーカイブページを含め、全てのページを再構築してください。これは各ページの index.html や archives.html のリンクを index.php または archives.php に変更するためです(ただし公開テンプレートには archives.html へのリンクはありません)。
1.2 不要ファイルの削除
ブログのトップディレクトリにある古いファイル、つまり index.html および archives.html を削除します。Movable Type にはファイルを削除する機能はありませんので、FTPツールあるいは TeraTerm 等を利用してログインしてファイルを削除します。
html ファイルを削除する理由は次の通りです。
HTTPサーバの設定にもよりますが、一般的にURLが "/" で終わる場合、サーバは最初に、そのディレクトリの index.html を探すようになっています。当サイトの場合、
http://www.koikikukan.com/
をブラウザに指定して実行した場合、HTTPサーバは
http://www.koikikukan.com/index.html
を一番最初に検索します。index.html が存在しない場合は次候補の index.htm や index.php 等を検索する、という仕組みになっています。
したがって、拡張子を変更しただけでは新しく作った index.php にアクセスされない可能性があります。「可能性がある」と書いたのは、URLに index.php まで指定すれば当然アクセスできるからです。
archives.html については、実際にはURLに archives.php まで設定するためアクセス上は問題ありませんが、削除することを推奨します。*1
参考までに、この「ファイルを検索する」という設定は Apache HTTP サーバの「DirectoryIndex ディレクティブ」で行います。
このディレクティブに記述されたファイルがひとつもみつからない場合はそのディレクトリのファイルリストが表示される、という仕組みになっています。
2.アーカイブ・テンプレートの拡張子を変更する
2.1 表示モードの切替(3.3以降)
各ブログ管理画面左にある「設定」をクリックします。Movable Type 3.2 をお使いの場合は2.2項に進んでください。
Movable Type 3.3 以降をお使いの場合、管理画面の表示モードが「基本モード」と「詳細モード」の2つに切り替えられるようになっており、デフォルトでは「基本モード」になっているので、ページ右側にある「詳細モードに切り替え」をクリックしてください。 |
2.2 拡張子の変更
ページ上にある「公開」をクリックします。

表示されたページ中段に「公開」欄があります。その2つめの「アーカイブの拡張子」を書き換えます。
デフォルトは「html」になっています。 |
これを「php」に書き換えます。書き換えたら一番下の「変更を保存」をクリックします。 |
2.3 旧ファイルの削除
2.2項の設定が終わったら再構築を実施しますが、再構築を実施する前に html ファイルを全て削除することを推奨します。*1
ただし旧ファイルへのアクセスでデッドリンクにさせないことと、4項のリダイレクト実施等との手順を考慮して、削除は後回しにして頂いて構いません。
Movable Type にはファイルを削除する機能はありませんので、FTPツールあるいは TeraTerm 等を利用してログインしてディレクトリ(またはファイル)を削除します。ファイルが大量にある場合はひとつずつ削除するのではなく、「アーカイブディレクトリ」を丸ごと削除する方法が便利です。
「アーカイブディレクトリ」はこのエントリーの便宜上の用語で「アーカイブページが保存されるディレクトリ」を指しますが、「アーカイブの設定」の有無によって「アーカイブディレクトリ」の位置が若干異なります。
2.3.1 「アーカイブの設定」を行っている場合
管理画面の「設定」→「公開」にある「アーカイブの設定」をチェックしていれば、その最初のディレクトリまたは配下のファイルを削除します。

上記の例では、FTPツール等で archives ディレクトリを削除します。削除したディレクトリは再構築によって作成されます。
2.3.2 「アーカイブの設定」を行っていない場合
「アーカイブの設定」にチェックを入れてない場合は、管理画面の「設定」→「公開」にある「アーカイブ・マッピング」の規則にしたがったディレクトリが、トップディレクトリ直下に作成されています。それらのディレクトリを削除します。誤って必要なディレクトリを削除しないようにしてください。
参考までに、「アーカイブ・マッピング」欄をカスタマイズしていなければ、
- 月別・週別・日別アーカイブ:「年(「2006」等)」ディレクトリ
- カテゴリー・アーカイブ:「catX」ディレクトリ
が最上位のディレクトリになると思います。ディレクトリやファイルを削除する前に(削除して良いファイルであることを)確認してください。
3.XML宣言の修正
テンプレートの先頭に
<?xml version="1.0" encoding="<$MTPublishCharset$>"?>
がある場合、拡張子を .php にして表示すると、ページが真っ白になるか
Parse error: parse error, unexpected T_STRING in [...] on line 1
というようなエラーが表示されます。これはXML宣言がPHPとして誤解釈されてしまうための事象です。
これを回避するには、XML宣言を削除するか、
<? echo('<?xml version="1.0" encoding="<$MTPublishCharset$>"?>') ?>
とPHPが解釈可能なフォーマットに変更してください。
4.ファイル・ディレクトリのパーミッション変更
PHPファイルが実行ファイルとして動作するように、再構築で生成されるディレクトリおよびファイルのパーミッションを変更します。
Movable Type 3.3 以降の場合であれば、例えば mt-config.cgi に下記の3行を追加します。
HTMLUmask 0022
DirUmask 0022
HTMLPerms 0777
3.2 の場合は、下記のように mt-config.cgi に設定項目がコメントアウトされて表示されています。
# When creating files and directories, Movable Type uses umask settings to
# control the permissions set on the files. The default settings for file
# creation (HTMLUmask, DBUmask, and UploadUmask) are 0111; for directory
# creation (DirUmask), the default is 0000. You should not change these
# settings unless you are running MT under cgiwrap or suexec, or some other
# scenario where the MT application runs as you; in addition, you should not
# change these settings unless you know what they mean, and what they do.
#
# DBUmask 0022
# HTMLUmask 0022
# UploadUmask 0022
# DirUmask 0022
#
#
# In addition to controlling permissions via umask settings, you can also
# use the HTMLPerms and UploadPerms settings to control the default
# permissions for files created by the system (either as output files or
# uploaded files). The only real use of this is to turn on the executable bit
# of files created by the system--for example, if MT is generating PHP files
# that need to have the executable bit turned on, you could set HTMLPerms
# to 0777. The default is 0666. You should not change these settings unless
# you know what they mean, and what they do.
#
# HTMLPerms 0777
# UploadPerms 0777
これを、設定が必要な行の先頭にある「#」と半角空白を削除して、先と同じ内容に修正してください。
# When creating files and directories, Movable Type uses umask settings to
# control the permissions set on the files. The default settings for file
# creation (HTMLUmask, DBUmask, and UploadUmask) are 0111; for directory
# creation (DirUmask), the default is 0000. You should not change these
# settings unless you are running MT under cgiwrap or suexec, or some other
# scenario where the MT application runs as you; in addition, you should not
# change these settings unless you know what they mean, and what they do.
#
# DBUmask 0022
HTMLUmask 0022
# UploadUmask 0022
DirUmask 0022
#
#
# In addition to controlling permissions via umask settings, you can also
# use the HTMLPerms and UploadPerms settings to control the default
# permissions for files created by the system (either as output files or
# uploaded files). The only real use of this is to turn on the executable bit
# of files created by the system--for example, if MT is generating PHP files
# that need to have the executable bit turned on, you could set HTMLPerms
# to 0777. The default is 0666. You should not change these settings unless
# you know what they mean, and what they do.
#
HTMLPerms 0777
# UploadPerms 0777
なおこの設定項目は一意に決められるものではなく、レンタルサーバによって設定値が異なる可能性があります(上記はさくらインターネット+MySQLの場合)。また DBUmask 0022 が必要な場合もありますのでご注意ください。
HTMLPerms は、perl の sysopen の第4パラメータ、つまりファイル作成時のパーミッションとなります。
XXUmask は、Movable Type 内部から Linux の umask コマンドを実行する時の引数となります。umask の機能については下記を参照ください。
5.ファイルのリダイレクト
アーカイブページについて、旧ファイル(html)から新ファイル(php)へのリダイレクトを行います。リダイレクトを利用すれば、外部からリンクされてしまっている旧ファイルへのリンクを、新ファイルへ転送することができます。
設定の詳細は「.htaccess によるリダイレクト」を参照ください。
6.出力フォーマットをカスタマイズしている場合
1項および2項で MovableType の全ての拡張子は .php に変更されますが、アーカイブページ(カテゴリー/月別/日別/週別/エントリー等)のパスおよびファイル名をカスタマイズしていて、「出力フォーマット」欄に拡張子 "html" を直接設定している場合は2.2項の設定が反映されません。
この場合、「出力フォーマット」欄の拡張子の代わりに %f または %x を使用します。2.2項の設定により、%x は ".php" に変換されます。
詳細については下記のページを参照ください。
Movable Type 3.3マニュアル:アーカイブ・ファイル名定義
2006,08.28 追記
4項のパーミッション変更作業がもれていたので追加しました。
2006,08.30
XML宣言の修正について追加しました。
2007.10.28
記事のページ分割を解除しました。
*1 旧ファイルを削除する理由は、もし削除しなければ同じ内容のファイルが2つ存在することになります。内部リンクから旧ファイルへのアクセスがなくても、外部からのリンク等が残っている場合、検索エンジンのクロール対象となり、ペナルティを受ける可能性があるためです。
ブログ管理画面の左にある「テンプレート」クリックします。
次ページで表示された「出力ファイル名」欄が下のように index.html になっています。
これを index.php に変更し、「保存」あるいは「保存と再構築」をクリックします。
Movable Type 3.3 以降をお使いの場合、管理画面の表示モードが「基本モード」と「詳細モード」の2つに切り替えられるようになっており、デフォルトでは「基本モード」になっているので、ページ右側にある「詳細モードに切り替え」をクリックしてください。
デフォルトは「html」になっています。
これを「php」に書き換えます。書き換えたら一番下の「変更を保存」をクリックします。
