• ベストアンサー

includeのパス指定は"/"で始められない?

こんにちは。php5でウェブアプリを作っています。 いろんな階層からincludeされるファイルの中にさらにincludeを記述しているため、相対パス指定ではなく、ドキュメントルートからのパスを include("/top/hoge/aaa.php"); のように書きたいのですが、こうすると読み込んでくれません。includeではこういう指定は出来ないんですか? みなさんどうなさってますでしょうか。includeファイルの中のinculdeのパスの指定…。

質問者が選んだベストアンサー

  • ベストアンサー
  • frequenzy
  • ベストアンサー率100% (2/2)
回答No.3

#1です。少々補足を。 確かにクライアントサイド(つまりブラウザ)で実行されるものはURLのドメインの後ろ側、つまりhttp://example.com/foo/barというURLなら、"/foo/bar"が絶対パスとして成り立ちます。 しかし、お察しの通り、サーバーサイドで実行されるものでは、絶対パスはサーバーのルートからのパスということになります。 このパスはサーバーの設定によって異なるため、一概に答えることはできませんが、#1で書いたように <?php echo realpath(dirname(__FILE__)); ?> というコードを実行することで、そのコードを書いたファイルの絶対パスを知ることができます。 #レンタルサーバーであれば、絶対パスは登録時に教えてもらえると思うのですが。それかサーバーのサイトに書いてあると思います。 余談ですが、PHPのinclude/requireにはリモートファイルアクセス機能というものがありまして、 include("http://example.com/foo/bar.php"); というようにURLを指定すると、そのURLにあるファイルの出力結果(つまりPHPならそれが実行されて、echoなどで出力された文字)がPHPのコードとしてincludeされることになります。 この機能はPHPの設定で無効にすることもできます(というか大抵のサーバーではセキュリティ上、無効になっているはず)。

dalianse
質問者

お礼

やっと謎が解けました。サーバサイドとクライアントサイドでパスの指定の仕方が違うのですね…。基本的なことですがけっこうそういうこと教えてくれるサイトが少ないように思います。ありがとうございました。

その他の回答 (2)

  • galluda
  • ベストアンサー率35% (440/1242)
回答No.2

がると申します。 絶対Path指定可能の付近は#1さんの回答をご覧下さい。 で、ちと気になったのですが。/topというディレクトリ構造は、/を用いる、UNIX系OSではまず考えられません。 恐らくそれは「FTPの時の」Pathではないでしょうか?(FTPは、ユーザごとにある任意の場所を「rootディレクトリ」に出来るものがあります) まずは「正しい絶対パス」を調査されるとよろしいかと思います。

  • frequenzy
  • ベストアンサー率100% (2/2)
回答No.1

include/requireで"/"から始まる絶対パスを指定することは可能です。 <?php echo realpath(dirname(__FILE__)); ?> を実行して表示されるパスと、includeしたいファイルのパスの先頭は一致していますか? ちなみに自分の場合は、 define("BASEDIR",realpath(dirname(__FILE__))."/"); という定数を定義して、 include BASEDIR."aaa.php"; のようにしています。

dalianse
質問者

補足

ご回答ありがとうございます。なんか自分が大きな勘違いをしているような気がしてきたのですが、例えば、 http://aaa.com/bbb/ccc.php の、ccc.phpをインクルードしたい場合、 include("/bbb/ccc.php"); もしくは include("http://aaa.com/bbb/ccc.php"); とすればよいと思ったのですが、これではやっぱりだめなんですね…。絶対パスで指定する場合は、サーバのルートディレクトリから指定しなければならないと言うことでしょうか。 HTMLのimgタグのsrc指定なんかは/bbb/ddd.jpgでうまくいくんですが。

関連するQ&A