- 締切済み
include,require について
include,require元を知る方法はないのでしょうか? 例としては下記の状況でinclude.phpがどのscriptに呼び出されたかが知りたいのです。 main.phpの内容 <? include 'include.php'; ?> include.phpの内容 <? 処理・・・ ?>
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
#1補>main.php -> include1.php -> include2.php なるほど、そういう用途(多重ネスト呼び出し)もあるのかなと思ったりもしました。 PHP標準でそういう情報を得る方法は知らないです。 私が、自前で作るとしたら、 スタックみたいな機構を作って、 __FILE__,__LINE__を include する前にpush して、 includeした後にpop するような感じですかね。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
$_SERVER['SCRIPT_FILENAME'] でどうでしょうか
補足
$_SERVER['SCRIPT_FILENAME']ですと main.php -> include1.php -> include2.php とinclude1.phpがinclude2.phpを呼び出した際にもmain.phpを示してしまいます。 イメージ的には、include,requireする時に __FILE__ (可能なら__LINE__も)をどこかに書き出すような方法が知りたいです。 現在は、 <? class scriptDepth { var $_Position = '' ; function scriptStart( $file = null ) { $_Position = $this -> _Position ; $repdir = dirname( $_SERVER['SCRIPT_FILENAME'] ) ; $_Position .= ' -> ' . str_replace( $repdir , '' , $file ) ; $_Position = trim( $_Position , ' -> ' ) ; $this -> _Position = $_Position ; } function scriptEnd() { $_Position = $this -> _Position ; $tmpArr = split( ' -> ' , $_Position ) ; $tmpint = count( $tmpArr ) - 1 ; $_Position = implode(' -> ', $tmpArr); $this -> _Position = $_Position ; } function display(){ return $this -> _Position ; } } ?> こんなクラスを作って、各スクリプトの先頭と最終行に $Obj -> scriptStart(__FILE__);//先頭行 $Obj -> scriptEnd();//最終行 として、キャプチャしたい行に $Obj -> display(); として代用しています。
補足
ご回答ありがとうございました PHP5から debug_backtrace(); このような関数が追加されていたようでした。