• 締切済み

include,require について

include,require元を知る方法はないのでしょうか? 例としては下記の状況でinclude.phpがどのscriptに呼び出されたかが知りたいのです。 main.phpの内容 <? include 'include.php'; ?> include.phpの内容 <? 処理・・・ ?>

みんなの回答

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

#1補>main.php -> include1.php -> include2.php なるほど、そういう用途(多重ネスト呼び出し)もあるのかなと思ったりもしました。 PHP標準でそういう情報を得る方法は知らないです。 私が、自前で作るとしたら、 スタックみたいな機構を作って、 __FILE__,__LINE__を include する前にpush して、 includeした後にpop するような感じですかね。

koji4964
質問者

補足

ご回答ありがとうございました PHP5から debug_backtrace(); このような関数が追加されていたようでした。

全文を見る
すると、全ての回答が全文表示されます。
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

$_SERVER['SCRIPT_FILENAME'] でどうでしょうか

koji4964
質問者

補足

$_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(); として代用しています。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • (require / require_once) (include / include_once)について

    毎度、お世話になります。 今回は、requireとrequire_once(includeとinclude_once)の使い分けについて 教えて下さい。 取りあえず、改造しているPHPでは、include()だけを使って正常に動作しています。 include()させている箇所がいくつもあります。 ただ、やっぱりわからないのは、 requireとrequire_once(includeとinclude_once)に関して、 PHPマニュアルなどを見ても、処理方法の違いだけで、それならば最初から全部、 require_once() 又は、include_once() だけの方が良いように思えるのですが、 例えば、この処理に関しては、絶対、include()。これならば、require()。 また、これなら、include_once()、あるいは、require_onceと言う風に、 明確なものはあるのでしょうか? かなり迷路に迷い込んでます。(時間が止まってます) どうかよろしくお願いします。

    • 締切済み
    • PHP
  • requireとincludeどっちを使えばいいのでしょう?

    題名にもある通り、便利な関数やdefineで定義した定数などを別ファイルにしてそれをインクルードしたいとき、一般的にはincludeとrequireどちらを使えばよいのでしょうか? また、includeのほうが軽くなるということはあるのでしょうか? マニュアルではincludeは呼び出したときに何度でも呼び出される旨 http://www.php.net/manual/ja/function.include.php かいてありますが、実践でどのようにつかえばよいかわかりません。 どなたか、ヒントでもかまいませんのでおしえていただけないでしょうか? 皆様は、どちらをどのようにお使いになってらっしゃいますか? よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • require,includeとAjaxで分岐

    お世話になります PHPファイルについて requireやincludeで読み込まれた場合と Ajaxでのアクセスに対する処理を分岐する というのは可能でしょうか? $_SERVER['PHP_SELF']と__FILE__を比較すればいいかな とか思ってますがそれで本当に大丈夫なのか? もしかしてこの二つ、なんか違う形でパス返したりしないか? もうちょっと賢いやり方あるんじゃないか?とちょっと不安です 動機としては『これって一つにまとまってた方が便利じゃね?』 ぐらいのもんなんで、やめといたほうがいいっていうものなら諦めます よろしくお願いします

    • ベストアンサー
    • PHP
  • (初級)require等で共通ファイルを読み込む場合のパスの書き方で…。

    単純な質問です。 定数ファイル等、共通のファイルを、サイト内のPHPファイル全てで読み込みたい場合の方法について。 example.com /index.php /[const]/main.php /[page]/index.php ※[ ]はディレクトリを表す サイトexample.comにおいて、 トップページ index.phpと、 /[page]以下のindex.phpで、 同じ定数ファイルを読み込みたいとします。 例では、/[const]/main.php を読み込もうとしています。 ------------------------------ index.phpのスクリプト内では、 require_once 'const/main.php'; ------------------------------ と書け、 ------------------------------ /[page]/index.phpのスクリプト内では、 require_once '../const/main.php'; ------------------------------ と書くことになるかと思います。 このとき、読み込むファイルのパスが両者で異なりますよね。 (「../」が有るか無いかで異なる) これを、共通化したいのですが、可能でしょうか? つまり、例えばですが、 require_once 'COMMON_FILE'; と書けば、どちらのスクリプトファイルにおいても、 正しいパスが読み込まれる、というような。 また、サイトドメインが変更されても、書き換えなくて済むようにしたいです。 (例)example.com → example.net へ移動しても、書き換え要らずの方法で、何か方法を教えて下さい。 とっても、初歩的なことをお聞きして、すみません。

    • ベストアンサー
    • PHP
  • include,requireで外部URLの呼び込み

    include,requireのどちらでもいいのですが、別ドメイン或いは同ドメイン内における違う階層のファイルなど(例えば外部のhttp://www.ooxx.sample)を呼び込む際に、呼び込み先のリンクや画像パスが相対バスではうまくいきません。呼び込み先のリンク、画像パスを絶対URLにすれば問題ないと思いますが、作業が困難になるので避けたいです。 PHPでinclude,requireの使い方は向かないのでしょうか?或いは、他の方法で回避できる方法はないのでしょうか? (SSIやHTMLでインラインフレームみたいなことは使わない)

    • 締切済み
    • PHP
  • require Auth.php

    require 'Auth/Auth.php'; の動作について教えてください。 サンプルソース a.php に、 「require 'Auth/Auth.php';」と冒頭に記述してありました。 PEARだと思うのですが、結局この記述は、 a.phpに、 (1)Auth.phpの内容を取り込む? (2)Auth.phpの内容を継承する? どちらの解釈の方が正しいのでしょうか? 今までrequire だと、指定したphpの内容を取り込む((1)番だと)だと認識していました。 以下ソースのように動作してると思っています。Auth.phpも同じ動作と思っていいものなのでしょうか。 ・test.php <?php echo "start!!\n"; include("include.php"); echo "end!!\n"; ?> ・include.php <?php echo "include start!!\n" ?> ●実行結果 start!! include start!! end!!

    • ベストアンサー
    • PHP
  • include/require文へのバリデーション

    include/require文でユーザが入力した文字列を未検証のまま使用をしてはいけませんが、 $filename = array('aaa','bbb','ccc'); for($i=0; $i<count($filename); $i++){ include('folder/' . $filename[$i] . '_include.php'); } のようにユーザーが入力した文字列を使わずに使用する場合はバリデーションはしなくても、 ハッキングされる心配はないのでしょうか?

    • ベストアンサー
    • PHP
  • PHP5で自動的にinclude_once

    概要:Apache 2 + PHP5 において、すべてのスクリプトに自動的に、include_onceのような効果を得る方法について教えてください。 詳細: 昔開発していたPHPスクリプトにおいて スクリプト中に include_once や require_once を書かずに スクリプトが呼び出される度に、スクリプトの冒頭で include_once したかのように、パスの設定などを行う初期化スクリプトを include して実行させる方法を取っていたはずなのですが、そのやり方を忘れてしまいました。 初期化スクリプト中では define などをして、スクリプトが依存するライブラリやデータのパスの設定を変数に対して行っており、処理コストの低い簡単な処理も入ります。 すべてのスクリプトにおいて、その変数が示すパスを使ってデータの読み書きを行っています。 その手法は、Apache2 が多目的に使われる場合には、オーバーヘッドあるいは弊害があるだろうというようなものだったと思います。(当時そう思った事をなんとなく覚えている次第です) Apache2がリクエストを受け取る度に、実行されるため、そのスクリプトと関係のない php スクリプトが呼ばれた際にも自動的に取りこまれてパスなどが変数に設定されます。 その Apache 2 は、限定的な用途で利用され、サーバーマシンごと特定用途で利用することを前提としていたため、そういった手法をとったのだと思いますが、詳細は不明です。 おそらく、apache2.conf (あるいは httpd.conf) か php.ini に設定していたと思うんですが、当時の設定ファイルを読み解いても、それらしい記述が見当たらず、ここ数日悩んでおります。 一応、実行環境について書きますと 当時の実行環境は、Windows 2000 + Apache 2 + PHP 3~5(?) + PEAR + MySQL 3(?) で、現在は ubuntu + Apache 2 + PHP5 + PEAR + MySQL 5 で動かそうとしております。 このような内容なのですが、お心当たりのある方は、ご教示お願い致します。

    • ベストアンサー
    • PHP
  • includeの使い方

    includeを連続して使いことは可能でしょうか? 具体的には、index.phpに下記記述を入れて、 <?php include("test.php"); ?> test.phpには下記の記述だけにしたいのですが、これは問題ありますか? <?php include("./company/".mt_rand(1,10).".php"); ?> 動かしてみたら問題なさそうなんですが、もっとスマートな方法はないのかと思いまして。

    • ベストアンサー
    • PHP
  • requireやinclude時の階層の書き方

    ずっと困ってます。よろしくお願いします。 読み込む大元のファイル名がindexだとして、その中にrequireを書くとします。 そこからrequireするファイルはindexと同階層にあるaフォルダにあるreq1.phpとします。 さらにreq1.phpからrequireするファイルがあり、同階層(aフォルダ内)にあるreq2.phpとします。 req2.phpはなぜかindexと同階層と、aフォルダ内の、計2カ所に同名の同じファイルがあるとします。 コードを書くと、 index内でrequire_once('a/req1.php'); req1.php内でrequire_once(dirname(__FILE__).'/req2.php'); としています。 この場合、読み込まれるreq2は、req1と同階層にあるものではなく、indexと同階層のものが読み込まれてしまいます。また、indexと同階層のreq2を消しておけば、req1と同階層に置いてあるreq2が読み込まれます。 この辺の挙動が、なぜこうなるのかを説明してください。 特に、 1.dirnameとの関係について 2.別階層に同名ファイルが複数存在の有無に関係なく、とにかくrequireする階層を確実に1つだけに限定する方法について(dirnameではうまくいかないような気がします) の2点は詳しく知りたいです。 よろしくお願いします。

    • ベストアンサー
    • PHP
iPhone13,iPadでアプリが使えません
このQ&Aのポイント
  • アプリで該当のプリンターが出てこないので、接続できません。iPhoneやiPadのプリント機能では該当プリンターが出てくるので、A4だけ出力できます。B5出力のためにアプリを使いたいです。
  • iPhoneやiPadで該当のプリンターがアプリで使えない状況が発生しています。プリント機能では該当プリンターが表示されないため、A4用紙の出力に制限されています。B5サイズの出力をするためにはアプリを使用したいです。
  • iPhoneやiPadのアプリで該当のプリンターが使用できません。プリント機能では該当プリンターが表示されず、A4サイズの印刷のみが可能です。B5サイズの印刷を行うためにはアプリの利用が必要です。
回答を見る

専門家に質問してみよう