例えば、DynamicMTML 適用ファイル内に書いてある PHP で file_get_contents() とかしようとしたときに、うまく取得できなくてハマったことありませんか?(無いか…) これって、自分が思っていたのと実行されている PHP でのパスが違うのが原因だったりします。...
例えば、DynamicMTML 適用ファイル内に書いてある PHP で file_get_contents() とかしようとしたときに、うまく取得できなくてハマったことありませんか?(無いか…)
これって、自分が思っていたのと実行されている 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>';
?>
これを、/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 ファイルです。
次に、さっきの 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>';
?>
これを、/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 が読み込めてしまうので、あれー?ってなってしまうかもしれません。
以上です。