web-dev-qa-db-ja.com

PHP include()相対パスではなく)パスをどのようにフォーマットしますか?

私のPHP= Webサイト全体のさまざまなページ、およびネストされたさまざまなディレクトリで、ルートからの相対パスに特定のファイルを含めたいと思います。

これらのページの両方にどのコマンドを入力できますか...

http://www.example.com/pageone.php
http://www.example.com/somedirectory/pagetwo.php

...このページを含めるには:

http://www.example.com/includes/analytics.php

これは動作しません:

<?php include('/includes/analytics.php'); ?>

これがWindows上のIISでホストされていることは重要ですか?

22
Zack Peterson

Include()またはrequire()(または* _onceバージョン)に絶対パス名を指定すると、そのファイルが含まれます。絶対パス名は、UNIXでは「/」で始まり、Windowsではドライブ文字とコロンで始まります。

相対パス(その他のパス)を指定すると、PHPは、一致する値が見つかるか、検索するディレクトリがなくなるまで、設定値 "include_path"のディレクトリを順番に検索します。

つまり、簡単に言うと、絶対ファイル名を含めるには、絶対ファイル名を指定します。関数 realpath() も参照してください。

独自のインクルード「ルート」を設定したい場合は、 この質問 (特に私の答えはもちろん:-)を参照してください。

5
gnud

include $_SERVER['DOCUMENT_ROOT'] . "/includes/analytics.php";

25
J Cooper

PHP=の観点から見ると、ルートはWebサーバー上のファイルシステムの最上位であり、Webブラウザーから見たルートではありません。

ほとんどの人は以下のいずれかを行います。

グローバル構成ファイルで定数を定義し、それをrequire/includeの各呼び出しで使用します。

または、このようなコードを使用します。

require_once realpath(dirname(__FILE__).'/config.php');
require_once realpath(dirname(__FILE__).'/lib/Database.php');

環境変数の使用は、場合によっては危険であり、セキュリティ問題の原因となることがあります。

9
Zoredache

@Stefan Maiが言うように、PHPには「ルート」パスがありませんが、簡単に定義できます。ほとんどのサイトには、毎回含まれるページ(構成ファイルなど)があり、あなたは付け加えられます:

define('ROOT', dirname(__FILE__));

次に、include ROOTを使用します。 '/includes/analytics.php';

また、Apacheの.htaccessで使用できるauto_prependディレクティブも非常に便利です。IISで設定するかどうかは不明ですが、PHP ini)。

8
Greg

上記の提案を組み合わせてこれを思いつきました。

私の_config.php_ファイルでは、ROOTを次のように定義しています。

define('ROOT', $_SERVER['DOCUMENT_ROOT']);

次に、それを後続のファイルで使用します。

include_once(ROOT."/someFile.php");

include_once(ROOT."/includes/someFile.php");

4
Reggie Z. Banal

これは機能します。

<?php include('c:/inetpub/example.com/includes/analytics.php'); ?>

c:/inetpub/example.com/一部のグローバル変数の一部であるため、サーバー間で多少移植性があります。

1
Zack Peterson

..を使用して、ディレクトリを上に移動します。だからpageone.phpで

include 'includes/analytics.php';

pagetwo.php

include '../includes/analytics.php';

PHPで私が知る限り、「ルート」という概念はありませんが、必要に応じて定義できます。幸運を祈ります!

1
Stefan Mai

ティルダはシェルによって特殊文字として解釈されるため、PHPコード内で使用すると、OSに関係なく機能しません。

ユーザーのホームディレクトリを基準にして何かにアクセスしようとしている場合は、getenv()を試してみてください。Windowsが$HOMEと同等の環境変数を設定していると思います。

0
user42092

私が見つけた方法は:

<?php include $_SERVER['DOCUMENT_ROOT'].'\\Your\\Site\\Path.php' ?>

\\は、エスケープできる特殊文字(つまり\ n)がある場合に必要です。そのため、\\は文字列上の\になります。

Windowsを使用しているため、/の代わりに\を使用する必要があります

0
Santiago