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 4 の PHP化
- Movable Type 4 で PHP 化する時の注意事項
- Movable Type 4 の PHP 化で XML 宣言を自動的に切り替える
- Movable Type の PHP化(その1)
≫ MT3.3初期設定ファイル(mt-config.cgi)の編集 from monochrome designing
MovableTypeをインストールすると、mt-config.cgi-originalというファイルがあります。 実はこれはMTの初期設定ファイルになっ... [続きを読む]
≫ blogのPHP化とモジュール化 from こしぱ Weblog
えー相変わらず場の整備ばかりやっていますが。今夜はちと懸案であったPHP化を。 ... [続きを読む]
≫ 拡張子htmlのままPHP化(さくらインターネットの場合)1:挫折 from 独自ブログ作成法
■PHP化 小粋空間の「Movable Type の PHP化(その2:.htm [続きを読む]
≫ さくらインターネットでHTMLのままPHP化する from マイクロソフトマネーではじめる資産運用ブログ
さくらインターネットに移ってからPHP化でずっとつまづいていました。ロリポップの... [続きを読む]
≫ さくらのレンタルサーバでhtmlをphpとして作動させたい from ぼくんちのバックステージ
Movable Typeのphp化は意外と簡単に出来るのですが、php以外の拡張子でphpを作動させようと思うと、初めての人には意外と多くの落とし穴がある... [続きを読む]
MTでダイナミックパブリッシングを行っていて、
.htmlのままPHPが利用できるようにしてみました。
今のところ問題なく動いているのですが、
ひとつだけうまくいかないところが。
PHPスクリプト内にMTのテンプレートタグを組み込むと、
変換されずにそのまま文字列として処理されてしまいます。
何が原因なのでしょうか。
>KATANAさん
こんばんは。
ご質問の件ですが、Movable Type のダイナミックパブリッシングでは、MTタグを読み込むようなPHP のプログラムをテンプレートに記述しても正常に動作しないようです(MTタグがプログラムとして認識されるため)。
なおPerl版のダイナミックパブリッシングが「再構築不要化カスタマイズ(MT3.3専用版)」で公開されています(PHPが記述できるかについては不明です)。
それではよろしくお願い致します。
ご回答ありがとうございます。
やはり、組み込み自体が無理だったんですね。
これで謎が解けました。ありがとうございました。
>KATANAさん
こんばんは。
ご連絡ありがとうございます。
ではでは!
いつもお世話になってます(ってか今朝^^
.htmlのままPHPを有効にする為コチラを参考に導入してみましたがうまくいきません。。。
1と2を実施してみましたがうまくいかず、3に至っては「/use/local/bin/php」が分からずに、mtのディレクトリの中のmt.phpを一度ローカルに落とし、トップページのディレクトリに転送し、php.cgiにリネームを行ったところ404エラーになってしまいました。
3項の「php」というのはどのファイルの事を言うんでしょうか?
宜しくお願い致します。
MTのバージョンは3.32です
すいません追記です。。。
こちらに書くべきではないと思いますが変更後変になってしまったので書き込ませて頂きます。
トップページのカテゴリ別/月別のリンクをクリックするとなぜか「ファイルのダウンロード」画面が出て来てしまいます。。。
今メインページのBackUpが手元にないため明日昼間にでもメインページを貼りなおして再構築かけてみます。。。
>うにさん
こんにちは。
記事に typo がありました。
/use → /usr の誤りです。
ご迷惑おかけして申し訳ありません。
yujiro様
返信ありがとうございます。
今回PHP化に踏み切ったのは、まぁなるべくサイトを軽くする為、そしてPHP化の方法を調べていたところhtmlのままPHP化が可能と言う事でこちらを参考にやっているんですが・・・
肝心のphpファイルがみつかりません
「/usr/local/bin/php」と言う事ですが、「/bin」というのは恐らくcgi及びphpの専用フォルダだと思うんですが自分が借りているレンタルサーバーにはbinディレクトリがありません。
これはつまりトップディレクトリにあると言う事でしょうか?
できれば「phpファイル」の名称を教えていただきたいんですが。。。
もし「htmlのままPHP化」が不可能な場合は通常のPHP化に挑んでみます。
よろしくお願い致します。
>うにさん
こんにちは。
ご質問の件ですが、3項はさくらインターネット環境での設定方法です。
また、さくらインターネットでは /usr/local/bin 配下に php という実行ファイルが実際に存在しており、抽象的な名称を記述している訳ではありません。
php は /usr/bin 配下にあるかもしれません。
なお冒頭に記しております通り、本記事は拡張子が .html のままの php 化を保証するものではありませんので、予めご了承ください。
それではよろしくお願い致します。
yujiro様
返信ありがとう御座います。
勝手な解釈をしてしまい申し訳御座いませんでした。
1.2項で出来なかったので素直に通常のPHP化に取り組む事にします。
色々とありがとう御座いました。
>うにさん
こんばんは。
どういたしまして。
またなにかございましたらご連絡ください。
ではでは!
こんにちわ、kenjiと申します。
movabletype4.01を導入し、PHP化にチャレンジしているのですが、
どうしても解決できない事があるのでお伺いさせてください。
yujiroさんの書籍や色々なサイトを見ながら一通りPHP化の設定を行い、メインページとアーカイブページは問題なくPHPで表示されるのですが、
「ブログの個別ページ」及び「最新のブログ記事」あと「コメント」のリンクをクリックすると、
「Internal Server Error 500」と出てしまいます。
下記に書いているように、mt-config.cgiへの追加する記号が間違っているのかと思いいくつかパターンを試したのですが・・
一応下記のような手順でやってきました。↓↓
---------------------------------------------------------------------------------
サーバーは、さくらインターネットのスタンダードです。
インデックステンプレートとアーカイブインデックスの出力ファイル名の拡張子をhtmlからphpに変更し、 [ブログの設定]-[公開]-[アーカイブの拡張子]の「html」を「php」に変更しました。
次に、mt-config.cgiに
#======== PHP =======================
DBUmask 0022
HTMLUmask 0022
UploadUmask 0022
DirUmask 0022
HTMLPerms 0777
UploadPerms 0777
を追加し上書きアップロードしました。
最終的にすべてのファイルを再構築。
--------------------------------------------------------------------------------
何卒、ご指導ご鞭撻お願い致します。
>kenjiさん
こんにちは。
ご返事遅くなり申し訳ございません。
ご質問の件ですが、「Internal Server Error 500」が表示される「ブログの個別ページ」のファイル(どれかひとつ)を、FFFTP等のFTPツールでファイル名を表示させた時のパーミッション、およびそのファイルの上位のディレクトリのパーミッションはどうなっているか(775等)、お知らせ願えますでしょうか。
また、もしエラーとなるファイルと同じディレクトリに .html ファイルが残っていたら削除して、再度ブラウザで表示してみて頂けますでしょうか(ただしブラウザで直接ファイル名まで指定してエラーになるようでしたらこの作業は不要です)。
もうひとつお願いですが、エラーとなるPHPファイルをFTPツールで、ローカルPCにダウンロードし、ファイルの内容をメールフォーム
http://www.koikikukan.com/mail.php
に、貼り付けて送信ください(PHPファイルとして正常に表示するかどうか、こちらで確認したいと思います)
それではよろしくお願い致します。
yujiroさん>
お返事が遅くなり申し訳ございません。
またいつもご丁寧な回答本当にありがとうございます。
問題の件ですが、
ディレクトリのパーミッションを色々と試していたら、無事問題解決致しました。
どうやらパーミッションの数字が間違っていたようです。
何度もインストール&削除をして苦戦していたので嬉しいです。
これからも宜しくお願い致します。
>kenjiさん
こんばんは。
ご連絡ありがとうございました。
無事に解決されたようで良かったです。
ではでは!
はじめまして、mizuと申します。
いつもこちらのサイト、書籍にてお世話になっております。
今回1点だけ質問をさせて頂いても宜しいでしょうか。
「さくらのレンタルサーバーにてphpをhtmlで動かす。」
標準のPHP[PHP4](※PHP4.4.8)だとうまく動いたのですが、
PHPのバージョン選択でPHP5.2.5に変更したらエラーになってしまいました。
わたしの行った作業は、以下の通りとなります。
-------- ここから作業内容 -------------
1. phpのコピーとリネーム
※/usr/local/php-5.2.5/bin/php をローカルにダウンロード。
→ドメイン直下のディレクトリ/wwwにアップロード。
→phpをphp5.cgiとリネーム。
2. .htaccessの作成。
※下記のように記述。
AddHandler php5-script .html
Action php5-script /php5.cgi
参照サイト:http://blog.digibee.jp/2007/07/activecollab_1.html
3. htmlにphpのソースを記述してアップロード。
※下記のように記述。(URLなどの部分は省略。)
<?$data = file_get_contents (
"~~~記述内容省略~~~" );echo
$data;?>
-------- ここまで作業内容 --------
ブラウザにURLを叩くと"500 Internal Server Error"となってしまう。
上記の作業内容で不備などはありますでしょうか?
ちなみにphpをFFFTPでダウンロード、アップロードする際は、
バイナリモードだったと思います。
phpの転送とかは、バイナリモードで大丈夫でしたっけ?
あまりPHPのことには詳しくないです。。
誰にも聞ける人がいなかったので、質問させて頂きました。
大変お手数ですが、ご教示いただけませんでしょうか。
>mizuさん
こんにちは。
ご質問の件ですが、
<?php phpinfo(); ?>
の1行を書いたファイルも正常に表示されないでしょうか。
なお、PHP5は試したことがないので、掲載しているリンク先の情報以外にネタがありません。申し訳ありません。
転送モードは改行コードの変換だけなので、短いファイルであればバイナリモードで転送しても問題ないと思います。
それではよろしくお願い致します。
ご返信ありがとう御座います。
<?php phpinfo(); ?>
のソースを用いると、拡張子をphpに変えた場合でも画面が白くなってしまいます。
わたしが使用しているソースは、
<?$data = file_get_contents (
);echo
$data;?>
となります。
こちらは拡張子をphpに変えると正常に動作するので、
ソースは間違ってないように思います。
ただやはり.htaccessを使用すると、Internal Server Errorになってしまいます。。
まあ、今回は諦めて拡張子をphpに変更します。
大変お忙しい中、色々と調べて頂いて有難う御座いました^^
それでは。
>mizuさん
こんばんは。
ご連絡ありがとうございました。
お役にたてず申し訳ありません。
現在さくらでMTをphp化で奮闘中の者です。
>ブログのトップディレクトリが www 直下でない場合、例えば hogehoge というディレクトリである場合は、hogehoge 配下にアップロードしてください。
この場合
X Action myphp-script /php.cgi
O Action myphp-script /hogehoge/php.cgi
間にhogehogeディレクトリを指定しなければ.htmlを.phpとして読むことは出来ませんでした。
>KENさん
こんばんは。
ご指摘の件につきまして、3.2項に記述を追加致しました。
なお、3.1の説明をすべて3.2項に反映している意味はありませんでした(3.1の後半は補助的な内容なので3.2項の設定は適宜読み替えてもらう暗黙の意図がありました)ので、その点はご理解ください。
回答ありがとうございます
お礼のコメントが大変遅くなりました。申し訳ありません。
あれから色々とphp化の勉強を行い、さくらで独自ドメインを取得した場合と、そのままのURLで利用する場合等々でディレクトリ指定の記述が異なり、yujiroさんの仰る「適宜読み替えてもらう暗黙の意図」がようやく理解できて来ました。
お騒がせしたようです(^_^;
>KENさん
ご連絡ありがとうございました。
どういたしまして!
こんばんは。いつもMovable Typeの情報で参考にさせてもらっています。
さくらインターネットのスタンダードプランでMovable Type4.25を利用しています。
このエントリーと
「メインページのページ分割 for Movable Type 4」
http://www.koikikukan.com/archives/2008/04/01-020000.php
を参考にしてMTPaginateによるメインページの分割を行っていたのですが、さくらインターネットのサーバのスペックアップのメンテナンス以後、ページを表示させようにも500 Internal Server Errorが出るようになってしまいました。
とりあえずの処置として、.htaccessの記述を削除してMTPaginate関連のタグを用いないことでサイト自体は見られるようになっています。
一時的な現象なのか、それとも違うのか自分には判断がつきかねたのでコメント欄をお借りしました。
スペックアップの内容については
http://support.sakura.ad.jp/page/news/20090323-007.news
に概要が。
たびたび失礼します。
さくらインターネットのサーバのスペックアップ後、(どのサーバも同じ環境とはいえないと思うのですが)、usr/local/bin/php-cgi-wrapperというファイルをダウンロードしてサーバにアップロード後php.cgiにリネーム(そして属性の変更)を行うことによって記事と同じ効果(拡張子をhtmlのままphpを動作させる)ことができました。
とりあえず報告まで。
>melondogさん
こんにちは。
たびたびの情報提供、ありがとうございました。大変助かります。
また、以前のコメントに反応できずにすいません。
ではでは!