子宝どっとこむ

 

 PHP化

世の中の趨勢はどうやらPHPのようです。PHP化すると何がメリットなのかというと、


  1. 部品化することで総ファイルサイズを小さくできる

  2. 頻繁に変わらない部分を部品化し、日々の再構築(リビルド)から外せばリビルドが速くなる

  3. 同様に、部品化することで繰り返し回数が減るため、リビルドが速くなる

  4. 部品化することで、ソースの管理が楽になる


逆にデメリットは、

  1. htmlファイルをphpファイルに変更するため、他所からのリンクが切れる可能性がある

  2. 過去のトラックバックは確実にリンクが切れる

  3. 表示の際に部品を読み込むため、表示速度はhtmlファイルに負ける


などです。うちの場合は、サイト立ち上げからまだ10日ほどしか経ってませんし、日々の訪問者数も片手で数えられるぐらいなので、1,2の対策はしませんでした(2、3本投げたトラックバック先様ごめんなさい)。

きちんと対策するならば、.htaccessでリダイレクトする必要がありますが、そのあたりは、ブログ自由自在 Movable Type 上級カスタマイズ術に載ってますし、検索すれば解説しているサイトがいくつか見つかるでしょう。

なお、デメリットの3の表示速度ですが、これはPHPをどう利用するかによりますが、きちんと考えて設計すればさほどストレスなく表示させることは可能かな、というのが現在の意見です。

とりあえず、メインページの出力拡張子をhtmlから単純にphpに変え、設定画面の「アーカイブファイルの拡張子」を同じくhtmlからphpに変えれば、『なんちゃってPHP化』は完了です。

しかし、『なんちゃって』なだけあって、これだけではメリットはほとんど皆無です。

この状態で、FTPソフトを使ってサイトの情報を見ると、同じ名前のhtmlファイルの下にphpファイルが存在していることが分かります。また、中にはhtmlファイルだけしか存在しないものもあります。これらは、カテゴリーを変えたり、日付を変えて残ってしまったファイルなので、今後はこうした残骸ファイルを削除するように心掛けようという気持ちにはさせてくれるだけ、やった効果はあったのかもしれませんね(笑)

おそらく、私と同様にこのとき初めてMTのディレクトリ構造をきちんと見ることになるのではないでしょうか。日付アーカイブは年月フォルダに格納されているのは当然として、個別アーカイブまで年月フォルダに格納されていたのは意外な事実でした(よく考えれば当然のような気もしますが)。

また、カテゴリーアーカイブはカテゴリーフォルダに格納されているわけですが、フォルダ名に規則があることが分かります。つまり、英数字で構成されているわけで、日本語はカットされて作成されます(個別ファイル名も同様の命名規則になっていますね)。カテゴリー名が全部日本語だった場合にどうなるのかは、私はそうしてませんので不明です。

ディレクトリ構造がどうなっているのかが分かっても、すぐに役立つわけではないかもしれませんが、これから行なうPHPによる軽量化をする上で、知っておいた方がスムーズに行くと思いますので、このあたりで一通り構造を見ておくことをおすすめします。

さて、PHP化して、何も効果が出ないのは悲しいので、まずは簡単なことから始めましょう。

各ページに共通している部品をインデックス・テンプレートとしてしまう方法です。共通している部品の例としては、『バナー』『フッター』『カテゴリー一覧』『年月一覧』などが挙げられるでしょう。まず、『新しいインデックス・テンプレートを作る』のリンクを押し、テンプレートの名前と出力ファイル名を決めます。名前は分かりやすければ何でもいいので『01バナー』とかでもいいでしょう。出力ファイル名も任意ですが、英語表記の方が無難でしょう。拡張子も何でもありのようですが私は先の本に習って『inc』にしました。つまり、『banner.inc』としたわけです。

整理しますと
テンプレートの名前:01バナー
出力ファイル名:banner.inc

テンプレートの中身については、それまで使っていた部分をそのままカット&ペーストします。乱暴なようですが、大概はこれで動きます。

あとは、メインページやカテゴリーアーカイブなどの部品ファイルを読み込みたいページの適切な場所(つまり部品化するためにカットした場所)に

<?php include('<$MTBlogURL$>banner.inc');?>

といったタグを埋め込むだけです。上記の場合、ローカルサイトパスに『banner.inc』という部品ファイルが置かれていることを前提としてます。

別の方法として、

<?php readfile('絶対パス/banner.inc');?>

という方法の方がメリットが大きいことが分かりました。詳しい理由は追記に記載します。なお、パスは相対パスでもいいです。

これで、再構築をすると、ケース・バイ・ケースですが、私の場合は10%程度ファイルサイズが小さくなった感じです。少なくとも効果はあったと言えるでしょう。

なお、参考にしたサイトは数多くありますが、中でもいち押しなサイトはBoycott Street 221Bです。

【2005/6/16追記】
Yahooで『MovableType 複数サイト』で検索してみたところ、このサイトが上位ヒットしました。ところが、リンク先はhtmlファイル(がーん)

ということで、htaccessは作らないつもりでしたが方針を変えました。面倒くさそうと思っていましたが、ブログ自由自在 Movable Type 上級カスタマイズ術に書いてあるとおりにやったら数分で完了しました。著作権法に引っかかるので内容のご紹介ができないのが残念ですが。いろいろ調べて時間を使うより、この本買っておいた方がいいです。


【2005/6/21追記】
hohohoさんのご指摘を受け、include関数よりもreadfile関数を利用した方がいいことが分かりました(include関数とreadfile関数とを使い分けるのが面倒くさいという方はinclude関数一本に絞った方がいいかもしれませんが…)。
小粋空間の(o)さんのコメントを引用します。

<?php include("http://yujiro.dyndns.org/blog/koikikukan/hogehoge.html"); ?>
のように書くのは2つの意味でお勧めしません。

まず、hogehoge.htmlはサーバーサイドにあるファイルなのでURLを指定する必要はありません。URLを指定すると単にファイル名を指定するのに比べてアクセスにオーバーヘッドがかかります。

次にincludeはPHPモジュールを読み込む関数で、引数をプログラムだと思って評価します。もしhogehoge.htmlがPHPプログラムを含まないのであれば、includeで読み込むのは得策ではありません。代わりにreadfileという関数があります。

以上をまとめるとこんな感じにするとよいのではと思います。
<?php readfile("/blog/koikikukan/hogehoge.html"); ?>


URLだとアクセスにオーバーヘッドがかかるというのは、URLだとDNSサーバーによってIP変換しなければならないためでしょうか。
includeは引数をプログラムだと評価するわけですから、実際にPHPプログラムを読み込む場合は当然includeになるのですね。注意しましょう。なお、PHPプログラムの例といえるかどうかは分かりませんが、入れ子の場合はincludeでないと駄目なようです。つまり、

  • 親ファイルがinclude関数を使い、子ファイルもinclude関数を使うのはOK

  • 親ファイルがinclude関数を使い、子ファイルはreadfile関数を使うのもOK

  • 親ファイルがreadfile関数を使い、子ファイルもreadfile関数を使うのはNG


ということです。

なお、あまり気にしていませんでしたが、includeでもURL指定でなく、絶対パス指定は可能なようです。

 Trackback Pings(0)

No trackbacks found.

 Comments(0)

No comments found.

 Post a Comment

コメント用フィード