これは単なる説明の例です。発信者からのパスを取得するには
[./includes/functions.inc.php]
function getPHPResult($path) {
ob_start();
include $path;
$result = ob_get_clean();
return $result;
}
[./pages/a.php]
echo getPHPResult('b.php');
[./pages/b.php]
some php code.
このコードは機能しません。
a.phpの'b.php'
は'getPHPResult'
の有効なパスではないためです。
a.phpでinclude 'b.php'
を使用すると、a.phpと同じディレクトリにあるb.phpが読み込まれます。
しかし、a.phpでgetPHPResult ('b.php')
を使用すると、functions.inc.phpと同じディレクトリにあるb.phpが読み込まれます。
しかし、私はそうa.php
と同じディレクトリにb.phpロードしたい、私はgetPHPResult('../includes/b.php')
にgetPHPResult('b.php')
を変更する必要があります。
a.php
とb.php
を別のディレクトリに移動した場合は動作しません。
次に、getPHPResult
機能で正しいパスを見つけたいと思います。
私の解決策はちょうどdebug_backtrace
です。
function getPHPResult($path) {
$backtrace = debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT, 2);
$dir = dirname($backtrace[1]['file']);
ob_start();
include $dir . '/' . $path;
return ob_get_clean();
}
しかし、私はそれが良い方法ではないと思います。
debug_backtrace
なしで正しいパスを見つけるにはどうすればよいですか?
@ Ryan Vincent私はちょうどテンプレートエンジンを作ろうとしています。トップのコードは説明するための例に過ぎません。 –