• ベストアンサー

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

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

  • PHP
  • 回答数3
  • ありがとう数4

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

  • ベストアンサー
  • 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

  • include_pathに絶対パスを使うことはできないのでしょうか?

    include_pathに絶対パスを使いたいと思っています。 本当は php_value include_path "/common/php" としたいところですが、上手くいかなかったので php_value include_path ".:common/php:../common/php:../../common/php" として、ほとんどの階層からの相対パスを指定することで、上手く動くようになりました。 しかし、どうしても絶対パスで指定したいです。他のサイトでinclude_pathを調べても、どこも絶対パスでやっています。私は何がいけないのでしょうか……?

    • ベストアンサー
    • PHP
  • PHPをインクルードした時の画像パスについて

    PHPでページをインクルードをしようと思っています。 index.htmlにインクルードするページを仮にaaa.htmlとbbb.htmlとします。 aaa.htmlとbbb.htmlはcommonというフォルダに入っています。 aaa.htmlなどに使われている画像はcommonの中のimgというフォルダに入っています。 階層を表すと index.html common  ├aaa.html  ├bbb.html  ├img   ├gazou.jpg   ├gazou2.jpg というふうになっています。 そこで、index.htmlに <?php include("common/aaa.html"); ?>でインクルードし インクルードするaaa.htmlに設置してある画像には ../common/img/gazou.jpg というパスで設置しました。画像の確認はindex.htmlで確認済みです。 ※img/gazou.jpgではなぜかダメでした。(aaa.htmlからの相対パスではなく、インクルードした側にindex.htmlからの相対パスになるのでしょうか?) 次に salonというフォルダにあるhair(ヘアサロン)のフォルダにあるkari(仮)というお店ページを作ります。 階層は以下のようになっています。 index.html common  ├aaa.html  ├bbb.html  ├img   ├gazou.jpg   ├gazou2.jpg salon  ├hair    ├kari     ├index.html     ├access     ├ ├index.html     ├menu     ├ ├index.html   インデックスがあり、アクセスページ、メニューページなどさらに一つ入るといった作りになっています。 ここのページにもtoppageのindex.htmlと同じようにaaa.htmlなどインクードします。 階層が違うのでsalon/hair/kari/index.htmlへのインクルードは <?php include("../../../common/aaa.html"); ?> で行いました。問題なくインクルードはできたのですが、画像がつぶれています。 階層が違うからですよね? このように階層が異なるデータで 共通のインクルードをしたい時はどうしたらいいのでしょうか? 階層が違くとも共通で入るヘッダー等作りたいのです。 環境はテストなのでアパッチ、ローカルサーバーで見ています。 本アップしないと見れないのでしょうか? お願いします。

    • ベストアンサー
    • PHP
  • php_value include_pathを無効

    php_value include_pathを、あるディレクトリ以下では、無効にしたいのですが、 どうすればよいでしょうか? ■前提 ・サイト全体は、「.htaccess」に「php_value include_path」を書いて制御 ■やりたいこと ・ある特定ディレクトリ「hoge」以下では、「php_value include_path」ではなく、 PHPに直接書いた「require_once './★★/●●';」を利用したい ・つまり、設定ファイル「.htaccess」に記述した中のある一部分(特定ディレクトリ以下)だけは、「PHPソースに記述」したincludeパスを使いたい ■試してみてダメだってこと ・「hoge」に「.htaccess」を設置し、空の「php_value include_path=""」と書いてみたけど、うまくいきませんでした

    • ベストアンサー
    • PHP
  • include_pathについて。

    PHP 5.2以上のバージョンの話として質問をさせて頂きます。 (ローカルではWindows版XAMPPを使用。リモートはLinuxサーバー。) ----- <ファイルの位置関係> imgディレクトリ --- C.jpg (画像ファイル) mainディレクトリ --- A.php sub ディレクトリ --- funcディレクトリ --- B.php (img、main、subディレクトリは3つとも同階層) //------- (A.phpの記述) require_once '../sub/func/B.php'; //------- (B.phpの記述) echo '<img src="C.jpgのパス">'; // ←■画像Cを表示したい■ //★どう表示されるかテスト★ echo dirname(__FILE__) ;   //----- このような状況で、 A.phpにアクセスすると、★テスト★の所は、 ~/sub/func   //←のように表示される。 // つまりこれは、__FILE__ は、 // A.phpではなく、B.phpを指している。(?) と、このような時、B.phpの中で、 C画像の相対パスは、どう書いたらよろしいのでしょうか? A.phpから見た、C画像の相対パスで書いたらいい? それとも、B.phpから見たソレでしょうか? phpinfo()でinclude_pathの項目を調べると、 .:/usr/local/lib/php/~ のように書かれています。(デフォルトのままです。)

    • ベストアンサー
    • PHP
  • phpでincludeをするときのパスについて

    phpでincludeをするときのパスについて <?php include "/home/a.php"; . . . ?> のようにして、ルートディレクトリのファイルにアクセスしたいのですが、 /が先端にあるとファイルにアクセスできないのです。 どのようにしたらルートディレクトリのファイルをincludeできるのでしょうか

    • ベストアンサー
    • PHP
  • includeと#include

    他の人が書いた拡張子が.aspとなっている ファイルを眺めているのですが、その中に <!-- #include file="./Include/aaa.inc" --> <!-- include file="./Include/bbb.inc" --> という2種類の記述が存在していました。 前者は相対ディレクトリ指定でaaa.incというファイルを 読み込んで処理すると理解しておりますが 後者も同じ動作をするものなのでしょうか? 実行環境が手元にないため試すことも出来ず Net上を検索してもこれといったものが見つかりません。 どなたかご教授お願いします。

  • PHPでのドキュメントルート指定方法

    PHPでのドキュメントルートの指定方法がうまくいかず困っています。 マルチドメインで組んでいます。 公開ディレクトリのルートは /home/hoge/www になります。 wwwの中に/piyo/でマルチドメインを組んでいます。 →絶対リンクを/home/hoge/www/piyo/ ここに指定したいです。 あるサイトを見てcommon.phpを作成し、index.phpと同じ階層に置き、index.phpの頭に <?php include 'common.php'; ?> を指定すると設定ができると記載されていたので下記の様に設定しました。 // common.php // <?php // サーバー上の絶対パスを記入 // これは公開ディレクトリのルート(サイトのルートディレクトリ)と一致 $__DOC_ROOT__ = '/home/hoge/www/piyo/ <http://piyo.co.jp/> '; ?> // index.php // <?php include 'common.php'; ?> <!doctype html> <html lang="ja"> … <?php echo $_SERVER['DOCUMENT_ROOT']; ?> … </html> echoで呼び出してみましたがサイトのルートディレクトリが /home/hoge/www こちらになり変更されていませんでした。 これを /home/hoge/www/piyo/ に変更したいと思います。 ご回答よろしくお願い致します。

    • ベストアンサー
    • PHP
  • インクルードファイルからの相対パス

    main.php: <?php include('x/sub.php'); ....... ?> x/sub.php: <?php $a=file('data.txt'); ....... ?> において data.txt は main.php と同じディレクトリになければなりません インクルードされたファイルからファイルを呼び出すときに インクルード先からの相対パスでファイルを指定できるようにできないでしょうか? つまり上の場合にはdata.txtがsub.phpと同じディレクトリにあるようにです

    • ベストアンサー
    • PHP
  • php インクルードincludeした時のパス

    phpにてincludeした時のパスで躓いています。 現在のツリーは以下の様になっています。 index.html common  ├header.html  ├footer.html  ├right.html  ├img   ├navi-home.jpg   ├navi-1.jpg  ├css   ├base.css salon  ├hair    ├kari     ├index.html     ├access     ├ ├index.html     ├menu     ├ ├index.html この中の../hair/kari/index.htmlの中に ../common/header.html及びfooter.htmlを <?php include_once(dirname(__FILE__).'/../../../common/header.html'); ?> にてインルードしています。(書き方あってます?dirname(__FILE__).いります?) つぎに../hair/kari/access/index.htmlの中にもインクルードします。 <?php include_once(dirname(__FILE__).'/../../../../common/header.html'); ?> という風に一つ下の階層なので../を付け足しました。 このようにページ毎にheaderまでの相対パスが違うので、そのページ毎にパスを書き換えていかなければいけないものなのでしょうか? また../始まりではなく/始まりでないと表示されません。 /始まりは絶対パスでしたっけ? この書き方は間違っているのでしょうか? そして最後に、 ../common/header.htmlの中の画像ファイルやリンクは <img src="/common/img/navi-home.jpg"> の様に書かないと、インクルードしたファイル側で表示されません。 これも同じように/始まりのこの書き方でいいのでしょうか? 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • インクルードパスを相対パスで指定

    Visual C++ 2017を使用したプロジェクト開発で、次のようなディレクトリ構造になっているとします。 root/  └ dev/    └ L1/      ├ L2/      │ ├ L3/      │ │ └ L4/      │ │   └ MyProj(開発用ディレクトリ)      │ └ foo/      │      └ include/ プロジェクトファイルやソースファイルは全てMyProjの直下にあります。 L2と同じ階層にあるincludeディレクトリにあるtest.hをソースファイルにインクルードするために、次のような#include文を記述します。 #include "../../../include/test.h" これで問題なくコンパイルが通ります。 次に、プロジェクトのプロパティの「追加のインクルードディレクトリ」に"../../foo"を追加します。 これは次のようなオプションと解釈されてコンパイラに渡されます。 /I"../../foo" fooというディレクトリのみを参照パスに追加するつもりで、プロジェクトファイルからの相対パスで指定しました。 さてここで#include文を次のように書き換えてみました。 #include "../../include/test.h" これでコンパイルが通るのです。 ソースファイルからtest.hへの相対パスは ../../../include/test.h のはずですが、なぜこれでコンパイルが通るのでしょうか? ちなみに「追加のインクルードディレクトリ」に何も指定しない状態では、includeファイルを開けないと出てコンパイルエラーとなります。 なのでこの設定が影響しているのだとは思いますが。

専門家に質問してみよう