ちょっと知っておくといいかもしれないDynamicMTMLで実行するPHPのパス関係

例えば、DynamicMTML 適用ファイル内に書いてある PHP で file_get_contents() とかしようとしたときに、うまく取得できなくてハマったことありませんか?(無いか…)

これって、自分が思っていたのと実行されている PHP でのパスが違うのが原因だったりします。

普通の PHP

ここでいう普通のというのは、DynamicMTMLを介さないで実行されるファイルのことです。

例えば、以下のようなファイルを作成します(汚いコードですいません)。

<?php
echo '<p><strong>現在のファイル : $_SERVER["PHP_SELF"]</strong></p>';
echo '<p>' . $_SERVER['PHP_SELF'] . '</p>';
echo '<p><strong>絶対パス : __FILE__</strong></p>';
echo '<p>' . __FILE__ . '</p>';
echo '<p><strong>ディレクトリパス : dirname(__FILE__)</strong></p>';
echo '<p>' . dirname(__FILE__) . '</p>';
?>

これを、http://www.tinybeans.net/blog/test/test1.php としてアップロードして表示すると、結果は次のようになります。

現在のファイル : $_SERVER["PHP_SELF"]
/blog/test/test1.php

絶対パス : __FILE__
/var/www/html/blog/test/test1.php

ディレクトリパス : dirname(__FILE__)
/var/www/html/blog/test

結果は予想通りですね。DynamicMTML は、初期設定状態では .php のファイルは適用対象外になっているので、これは普通の PHP ファイルです。

DynamicMTML で実行する PHP

次に、さっきの test1.php の拡張子を .html に変えて、ファイルの先頭に <!-- <$mt:Date$> --> を挿入してみます。<!-- <$mt:Date$> --> を挿入するのは、MTタグが入っていないと DynamicMTML での実行にならないからです。

<!-- <$mt:Date$> -->
<?php
echo '<p><strong>現在のファイル : $_SERVER["PHP_SELF"]</strong></p>';
echo '<p>' . $_SERVER['PHP_SELF'] . '</p>';
echo '<p><strong>絶対パス : __FILE__</strong></p>';
echo '<p>' . __FILE__ . '</p>';
echo '<p><strong>ディレクトリパス : dirname(__FILE__)</strong></p>';
echo '<p>' . dirname(__FILE__) . '</p>';
?>

これを、http://www.tinybeans.net/blog/test/test1.html としてアップロードして表示すると、結果は次のようになります。

現在のファイル : $_SERVER["PHP_SELF"]
/blog/.mtview.php

絶対パス : __FILE__
/var/www/html/blog/templates_c/%%25^258^2588FBD4%%var%3A_6c74f658cce616ff7677808f2e5ad35a_.php

ディレクトリパス : dirname(__FILE__)
/var/www/html/blog/templates_c

先ほどの結果と全然違いますよね。

ですので、例えばこれらのファイルと同階層に sample.txt というファイルを置いておいて、それを file_get_contents('sample.txt') として読もうとすると、DynaicMTML のもとではファイルが見つからないということになってしまうのです。

こういった場合は絶対パスでファイルを指定してあげるのが安全ですね。

おまけ

これの実験は .mtview.php があるディレクトリの一つしたに test というディレクトリを作って実験しています。もしこれを、 .mtview.php と同じディレクトリで実験すると、どちらも sample.txt が読み込めてしまうので、あれー?ってなってしまうかもしれません。

以上です。

  • このエントリーをはてなブックマークに追加
Just a second...