要求、ヘッダー リダイレクト、画像などのパスを作成するために使用できる Web ルート ディレクトリを定義する定数を作成しようとしています。
ルート フォルダーとサブ フォルダー内のファイルで使用する場合、定数が機能する必要があります。etcを使用してパスを簡単にハードコーディングできることはわかっています../
が、これを機能させようとしている主な理由は (クリーンなコードは別として)、さまざまなサーバー上のさまざまなサイトでコードを再利用できるようにするためです。異なる場合があります。
私のディレクトリ構造
/
index.php
/library
libSetPathRoot.php
ドキュメントルート
echo $_SERVER["DOCUMENT_ROOT"];
戻り値: /home/james/web/sites/
「sites」ディレクトリには、/etc/apache2/sites-available で定義されたさまざまなドキュメント ルートが含まれています (さまざまなスクリプトで作業できるようにするため)。
ファイルの内容
/index.php
require_once('library/libSetPathRoot.php'); //works fine.. of course
/library/libSetPathRoot.php
define("PATHROOT", realpath(__DIR__ .'/..').'/');
上記は私のルートを正しく返します:
echo PATHROOT;// /home/james/web/sites/site3/
ルートパスを定義するために、次のコードやその他のさまざまなコードを試しました。
これらおよびその他は、redirect()、include() では機能せず、まったく機能しませんでした。
define ('PATHROOT', getenv("DOCUMENT_ROOT"));
define ('PATHROOT', basename(dirname((__DIR__))));
echo PATHROOT;
それ以外はすべて「site3」のみを返すようでした。
作業定義は、ディレクトリ構造内のどこに配置されているかに関係なくinclude()
機能します。require()
つまり、ルートへのサブディレクトリ内のファイル内のルートまたはルートへの他のサブディレクトリを呼び出す場合、ルート内のファイル内のファイルに含まれるファイルなど。
しかし、これをheader()
リダイレクトで機能させることはできません。繰り返しますが、使用する場所に関係なく、ルート スクリプト、サブ フォルダー スクリプト、インクルード スクリプトなどです。別のアプローチが必要かもしれませんが、多数のオプションを読み、それらを広範囲に試しました (半日を費やしました)。
私の定義がインクルードでは機能するのに、ヘッダー リダイレクトでは機能しないのはなぜですか? また、すべてで機能させるにはどうすればよいですか? それとも、インクルード用とリダイレクト用の 2 つの方法を使用する必要がありますか?
試したヘッダーリダイレクトの例の編集
header('Location: '.PATHROOT.'page-not-found.php');
:
404 を返します: /home/james/web/sites/site3/page-not-found.php
(ファイルは存在します)