TopMovable TypeカスタマイズPHP化 > 2006年8月
2006年8月29日

Movable Type の PHP化(その2:.html のままPHPを有効にする)

August 29,2006 12:02 AM
Tag:[, , ]
Permalink

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 がある場合は上記の設定を追加してください。

参考:AddType ディレクティブ

2.ForceType ディレクティブによる設定

.htaccess を作成し、下記の内容を記述します。

<FilesMatch "html$">
ForceType application/x-httpd-php
</FilesMatch>

参考:ForceType ディレクティブ

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項の説明を追記しました。

Comments [26] | Trackbacks [5]
2006年8月27日

Movable Type の PHP化(その1)

August 27,2006 5:38 PM
Tag:[, , ]
Permalink

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 ディレクティブ」で行います。

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つ存在することになります。内部リンクから旧ファイルへのアクセスがなくても、外部からのリンク等が残っている場合、検索エンジンのクロール対象となり、ペナルティを受ける可能性があるためです。

Comments [68] | Trackbacks [14]
Now loading...
QRcode

現在停止中です
携帯電話からこのQRcodeを撮影することで携帯用URLを取得することができます

URI for cellular phones
ギターに入った猫
Styles
Font Size
Default
For defective color vision
Gray Scale
RGB Color
Search this site
loading ...
BlogPeople
Syndicate this site
FeedBurner(RSS1.0/RSS2.0/Atom)
Counter
これまでのアクセス
クリエイティブ・コモンズ・ライセンス
Powered by
Movable Type 5.12