• ベストアンサー

ドキュメントルートより上のディレクトリにあるPHPファイルをインクルードするには?

外部に公開する必要がないディレクトリをドキュメントルートの外に置く構成のPHPプログラムを使用したいのですが、ドキュメントルートより上のディレクトリのPHPファイルをインクルードするにはどうすればよいのでしょうか? 例えば、DocumentoRootが/var/www/htmlで、 /var/www/html/test.phpから/var/www/data/include.phpをインクルードするようなケースです。 include.phpをtest.phpと同じディレクトリ(/var/www/html/)に置いた場合はインクルードできることを確認しています。 パーミッションは設定してあります。 phpinfo()でinclude_pathは「.:」となっています。 http.conf、php.ini等も編集することができる環境です。 ご存知の方がいらっしゃいましたら、アドバイスをお願いいたします。

  • PHP
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • Bonjin
  • ベストアンサー率43% (418/971)
回答No.2

No1さんの回答の通りに相対的な指定をするのもありですが、php.iniを編集出来るならinclude_pathを指定した方が良いです。 include_pathに追加すればディレクトリ階層やPHPの配置に影響されずにインクルード出来るので多くのPHPからインクルードされるならこちらの方が便利でしょう。 include_path=".:/var/www/data" にして include('include.php'); でインクルード出来るはずです。

kinmojr
質問者

お礼

ご回答ありがとうございます。 入れ違いになってしまいましたが、原因が判明しました。 http.confでopen_basedirという項目があるのですが、この値がドキュメントルートのみになっていました。 open_basedirにドキュメントルートの1つ上のdataディレクトリを指定するとインクルードできるようになりました。 なお、open_basedirはphp.iniでも設定できるようです。 アドバイスいただき、ありがとうございました。

その他の回答 (1)

noname#26650
noname#26650
回答No.1

include '../data/include.php'; あたりでできるのではないでしょうか。

kinmojr
質問者

お礼

ご回答ありがとうございます。 説明不足で申し訳ありません。 test.phpご指摘いただいた内容に変更してあります。 また、相対パス指定、絶対パス指定ともに試しましたが、同じ結果でした。

関連するQ&A

  • Apacheのドキュメントルート配下のファイル、ディレクトリの所有者は

    Apacheのドキュメントルート配下のファイル、ディレクトリの所有者は、rootのままだと危険でしょうか? /var/www/html/以下を公開しています。所有者をとりあえず、apacheに変えましたが、通常所有者はどうすべきですか? パーミッションの関係でrootのままが便利な気がしますが。

  • 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
  • phpでincludeをするときのパスについて

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

    • ベストアンサー
    • PHP
  • php.iniのinclude_pathのデフォル

    php.iniのinclude_pathのデフォルト値にたいして質問です。 現在PHP 5.6.6 をremi-56のリポジトリから、centos6にインストールしました。 そして、phpinfoを確認すると、 「include_path」の欄に「.:/usr/share/pear:/usr/share/php」とありました。 しかし、「php.ini」の中を検索しても、include_pathは、「;include_path = ".:/php/includes"」などのようにすべてコメントアウトされていました。 phpインフォをみたとき、include_pathに「「.:/usr/share/pear:/usr/share/php」が設定されているのは、デフォルトで決まった値なのでしょうか? どこか、設定ファイルにその値がかかれたりしているのでしょうか? httpd.confを検索しても、phpのパスを設定している様子もなく、.htaccessなども設置してないので、一体このデフォルト値はどこから来てるのか不思議です。 分かる方いましたら教えてもらえないでしょうか?

    • ベストアンサー
    • PHP
  • PHPのinclude('ファイル名')で指定できてしまうのはなぜ?

    お世話になります。 Smartyでテンプレートを用いながらPHPで開発を行っております。 たとえば、あるファイルからSmarty.class.phpをincludeする時 にinclude('Smarty.class.php')でどうやらincludeできている ようなのですが、、なぜ!?なのでしょうか? イメージ的には、include('パス')もしくはphp.iniに設定されている ディレクトリ直下のファイルというイメージなのですが。。 php.iniをのぞいてみるとinclude_pathはコメントアウトされている のですが・・ 疑問です。 ご教授お願いいたします。

    • ベストアンサー
    • PHP
  • Apache2.2のドキュメントルート変更ができない

    こんにちは。 apache1.3を今まで利用していたのですが、今回2.2を利用するにあたり、ドキュメントルートの変更が出来なくて困っています。 通常、ドキュメントルートは/var/www/htmlになっているのですが、今回(/home/test)に変更したいと思いDocumentRoot "/home/test"としました。ドキュメントルートを変更したので、以下の<Directory>も<Directory "/home/test">と変更したのですが、うまくいきません。 エラーがPermission denied: access to /index.html deniedと出ていますが、user,groupもtestに変更しております。 1.3の時はうまくいったのですが、2.2になって何か変更があったのでしょうか? どなたかご教授お願いします。

  • ドキュメントルートについて

    すいません、サーバーを借りた際のドキュメントルートについてなんですが、ドキュメントルートとは同一ドメインサーバ内の公開エリアでの最上位階層のこと。ということらしいんですが、このドキュメントルートがサーバによってpublic_htmlやhtdocsの場合があるんですが、これは、 ドキュメントルート=public_html=htdocs と考えて良いんでしょうか?   また、ROOT_PATHというのは各サイトの最上位階層のディレクトリ(各サイトのindex.htmlが入っている)のことで良いんですよね? 宜しくお願いします。

  • ドキュメントルートのphpファイルが削除できない

    ●質問の主旨 ドキュメントルート(var/www/html)に配置した、 phpファイル(quiz.php)をrootユーザーから、root権限で rmコマンドで削除しようとしましたが、 メッセージが表示されるだけで削除できません。なぜでしょうか? ご存知の方がいらっしゃいましたら、ご教示願います。 ●質問の補足 現在のコマンドの状況は以下の通りです。 [root@linuxserver html]#rm quiz.php rm: remove regular file 'quiz.php'? [root@linuxserver html]#ls -l -rw-r--r-- root root 781 Jan 13 22:11 quiz.php またこのquiz.phpファイルはwindowsクライアントPCで作成し、 以下の経過でドキュメントルートにアップロードしました。 1.WinSCPのSFTPで一般ユーザのホームディレクトリに転送 ↓ 2.一般ユーザのホームディレクトリ(/home/user)から cpコマンドでドキュメントルート(var/www/html)にコピペ ●環境 クライアント側:windows8.1 サーバー側:Linux(CentOS6.0) サーバーソフト:Apache2.2.15

  • jsでルートディレクトリより上のファイル

    jQueryのAjaxでurlをルートディレクトリより上の階層にあるファイルを指定できないのでしょうか? 具体的には以下のような階層になっていてindex.html内で記述されているAjaxでexe/test.phpを呼び出したいと思っています。 サーバールート ├home(ルートディレクトリ) │└index.html └exe   └test.php index.html内に記述されているjavascript $.ajax({  type: 'post',  url: '../exe/test.php',  dataType: 'html',  … }); これを実行すると、FireBugで「404 Not Found http://www.samplecom/exe/test.php」と出てしまいます。 つまり、'../exe/test.php'と指定しているのにルート直下の「exe/test.php」を指定しているかのような結果になってしまっています。 javascriptではルートディレクトリより上のファイルを指定できないのでしょうか?

  • PHPのinclude_pathについて

    以下はPEARでExcelファイルを作成し、ダウンロードするプログラムです。 <?php require_once("Spreadsheet/Excel/Writer.php"); $workbook = new Spreadsheet_Excel_Writer('sample3-1.xls'); $worksheet =& $workbook->addWorksheet('サンプル'); $workbook->close(); print('<html>'); print('<head>'); print('<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />'); print('</head>'); print('<body>'); print('<p><a href="./sample3-1.xls">Excelファイル</a></p>'); print('</body></html>'); ?> このプログラムを実行すると、 Warning: require_once(Spreadsheet/Excel/Writer.php) [function.require-once]: failed to open stream: No such file or directory in C:\Inetpub\wwwroot\Test\src\excelsample.php on line 2 Fatal error: require_once() [function.require]: Failed opening required 'Spreadsheet/Excel/Writer.php' (include_path='.;C:\php5\pear') in C:\Inetpub\wwwroot\Test\src\excelsample.php on line 2 というエラーメッセージが出ます。 php.iniには、PEARのパッケージをインストールした際に ;***** Added by go-pear include_path=".;C:\php-5.2.17-Win32-VC6-x86\pear" ;***** と記述されているにも関わらず、エラーメッセージのpathはinclude_path='.;C:\php5\pear'となっており、原因がわかりません。 php.iniはC:\WINDOWSの直下に置いてあります。 PHPのバージョンはphp-5.2.17-Win32-VC6-x86で、Cドライブの直下にインストールしています。 WebサーバーはIISです。 eclipseを使っており、バージョン?はpleiades-e3.6-php_20110326です。 また、phpinfoのinclude_pathはLocalとMasterの両方が.;C:\php5\pearとなっています…。 Configuration File (php.ini) Path C:\WINDOWS Loaded Configuration File C:\WINDOWS\php.ini この2つはこの様になっており、これは2つの場所は一致していないといけないのでしょうか? 解決手段がまったくわかりません。 何かこのエラーについてわかることがあれば教えていただけませんか?

    • 締切済み
    • PHP

専門家に質問してみよう