23

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 でホストされていることは重要ですか?

4

9 に答える 9

26

あなたはただ使うことができますinclude $_SERVER['DOCUMENT_ROOT'] . "/includes/analytics.php";

于 2008-12-05T19:24:13.100 に答える
9

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

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

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

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

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

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

于 2008-12-05T19:31:00.670 に答える
8

@Stefan Mai が言うように、PHP には「ルート」パスはありませんが、非常に簡単に定義できます。ほとんどのサイトには、毎回インクルードされるページ (構成ファイルなど) があり、次のように追加できます。

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

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

Apache の .htaccess で使用できる auto_prepend ディレクティブも非常に便利です。IIS での設定についてはわかりません (ただし、PHP ini でグローバルな設定を行うことはできます)。

于 2008-12-05T19:20:53.560 に答える
5

私は上記の提案を組み合わせてこれを思いついた。

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

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

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

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

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

于 2010-12-13T06:02:47.037 に答える
5

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

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

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

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

于 2008-12-05T19:25:01.493 に答える
1

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

include 'includes/analytics.php';

pagetwo.php で

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

私が知る限り、PHP で言及している「ルート」の概念はありませんが、必要に応じて定義することもできます。頑張ってください!

于 2008-12-05T19:15:12.353 に答える
1

これは機能します。

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

サーバーからサーバーへの移植性を高めるために、このc:/inetpub/example.com/部分を何らかのグローバル変数にする必要があります。

于 2008-12-05T19:29:09.567 に答える
0

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

ユーザーのホームディレクトリに関連するものにアクセスしようとしている場合は、試してみることができますgetenv()-Windowsが環境変数に相当するものを設定すると確信しています$HOME

于 2008-12-05T19:25:23.770 に答える