はじめての DynamicMTML #12 - 静的ファイルの PHP を実行する

前回の記事「はじめての DynamicMTML #11 - MT タグの中で PHP を実行する」の中で、「DynamicMTML では、テンプレート中の PHP も実行してくれます」と書きましたが、今回はそれについて少し詳しく見ておこうと思います。...

前回の記事「はじめての DynamicMTML #11 - MT タグの中で PHP を実行する」の中で、「DynamicMTML では、テンプレート中の PHP も実行してくれます」と書きましたが、今回はそれについて少し詳しく見ておこうと思います。

1. 普通の PHP ファイルを置いてみる

まず、DynamicMTML が有効な環境下に、以下のような普通の PHP ファイル「staticfile.php」を置いてみます。

<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>サンプル</title>
</head>
<body>
<h1><?php print 'Love DynamicMTML'; ?></h1>
<p><?php print $_SERVER['PHP_SELF']; ?></p>
</body>
</html>

この staticfile.php にアクセスしてみると、次のようにちゃんと表示されます。当たり前ですね。

startup-dymtml-36

2. HTML ファイルに PHP を書いてみる

次に、この staticfile.php の拡張子を html にしてみます。つまり、HTML ファイルに PHP のコードが書かれた状態になります。

その staticfile.html にアクセスすると何も表示されずに真っ白です。

3. HTML ファイルに PHP と MT タグを書いてみる

では、この staticfile.html に次のように MTDate タグを書いてみます。

<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>サンプル</title>
</head>
<body>
<h1><?php print 'Love DynamicMTML'; ?></h1>
<p><?php print $_SERVER['PHP_SELF']; ?></p>
<p>現在時刻は、<mt:Date> です。</p>
</body>
</html>

この staticfile.html にアクセスすると、先ほど真っ白だったページが、PHP も MT タグもきちんと解釈されて表示されています。

startup-dymtml-37

DynamicMTML の処理フローに当てはめてみる

ちょっと不思議に思えるかもしれませんが、次のフローチャートを見ると納得します。なお、この図は「README.ja.md at master from alfasado/DynamicMTML - GitHub」から転載させていただき、枠線を追記したものです。

dynamicmtml_flow1

上記 1〜3 について順番にフローに当てはめてみましょう。

「1. 普通の PHP ファイルを置いてみる」について

要するに、ただの PHP ファイルですね。これについては、PHP ファイルは DynamicMTML の処理対象外([設定→全般] で変更可能)となっているので、このフローには関係がありません。

「2. HTML ファイルに PHP を書いてみる」について

これについては、上図の青枠で囲んだ部分に該当します。このフローを見ると PHP コードが含まれる場合は実行されることになっていますが、先ほどの実験では実行されませんでした。

ここでこの PHP を実行するには、mt-config.cgi に「DynamicIncludeStatic」という環境変数に「1」を設定する必要があります。

DynamicIncludeStatic

mt-config.cgi に次の1行を設定すると、スタティックファイル中の PHP コードを実行するようになります。

DynamicIncludeStatic 1

これを設定することで、上図の青枠部分が実行されるようになります。なお、前回の記事で紹介した「DynamicPHPFirst」を設定していれば、この DynamicIncludeStatic は設定する必要はありません。

「3. HTML ファイルに PHP と MT タグを書いてみる」について

上記 2 で実行されなかったファイルに MT タグ(ここでは MTDate タグ)を追加しただけで MT タグに加えて PHP コードも動作するようになったのは、上図の赤い枠線のフローに変わったためです。ある意味、これが DynamicmMTML の基本の動作と言えるでしょう。

なお、この MT タグと PHP コードの実行順を変更する場合は、前回の記事「はじめての DynamicMTML #11 - MT タグの中で PHP を実行する」を参照してください。

以上です。

Published 2012-02-06
Updated 2019-06-25