回答:
以下のためのPHP> = 5.3.0試してみます
PHP マジック定数。
__DIR__
そして、あなたの道を相対的にしてください。
以下のためのPHP <5.3.0試してみます
dirname(__FILE__)
__DIR__ 。これはファイル自体に関連しているため、インクルード内のサブディレクトリ内では、ルートディレクトリだけを返しません。
あなたがそれを言うとき
$_SERVER['DOCUMENT_ROOT']
このパスが含まれています:
D:/workspace
そして、D:あなたが探しているもの、それはないですか?その場合、スラッシュで文字列を分解し、最初の文字列を返すことができます。
$pathInPieces = explode('/', $_SERVER['DOCUMENT_ROOT']);
echo $pathInPieces[0];
これにより、サーバーのルートディレクトリが出力されます。
更新:DIRECTORY_SEPARATORハードコードされたスラッシュ('/')の代わりに定数を使用すると、このコードはWindowsでも機能します。
アップデート2:$_SERVERグローバル変数は常に利用可能ではありません。たとえば、コマンドライン(cli)で。したがって、の__DIR__代わりに使用する必要があります$_SERVER['DOCUMENT_ROOT']。__DIR__phpファイル自体のパスを返します。
__DIR__代わりに使用できます$_SERVER['DOCUMENT_ROOT']。
Wordpressがこれを処理する方法を指摘したいと思います。
define( 'ABSPATH', dirname(dirname(__FILE__)) . '/' );
WordpressはWeb全体で非常に頻繁に使用されており、ローカルでも正常に動作するため、この方法を信頼しています。
あなたが試すことができます:
$_SERVER['PATH_TRANSLATED']
見積もり:
サーバーが仮想から実際のマッピングを行った後の、現在のスクリプトへのファイルシステム(ドキュメントルートではない)ベースのパス。注:PHP 4.3.2以降
PATH_TRANSLATED、Apache 1の状況とは異なり、Apache 2 SAPIで暗黙的に設定されることはありません。Apacheが設定されてSCRIPT_FILENAMEいない場合、サーバー変数と同じ値に設定されます。
この変更は、PATH_TRANSLATEDPATH_INFOが定義されている場合にのみ存在する必要があるというCGI仕様に準拠するために行われました。Apache 2ユーザーはAcceptPathInfo = On内部httpd.confを使用して定義することができますPATH_INFO
ソース: php.net/manual
概要
この例では、Apacheルートフォルダーが '/ var / www /'であることが常にわかっていて、次のフォルダーパス( '/ var / www / my_website_folder'など)を見つけようとしていると想定しています。また、これはスクリプトまたはWebブラウザーから機能するため、追加のコードがあります。
コードPHP7
function getHtmlRootFolder(string $root = '/var/www/') {
// -- try to use DOCUMENT_ROOT first --
$ret = str_replace(' ', '', $_SERVER['DOCUMENT_ROOT']);
$ret = rtrim($ret, '/') . '/';
// -- if doesn't contain root path, find using this file's loc. path --
if (!preg_match("#".$root."#", $ret)) {
$root = rtrim($root, '/') . '/';
$root_arr = explode("/", $root);
$pwd_arr = explode("/", getcwd());
$ret = $root . $pwd_arr[count($root_arr) - 1];
}
return (preg_match("#".$root."#", $ret)) ? rtrim($ret, '/') . '/' : null;
}
例
echo getHtmlRootFolder();
出力:
/var/www/somedir/
詳細:
基本的に、最初に「/ var / www /」が含まれているDOCUMENT_ROOTを取得しようとし、それを使用します。それ以外の場合は、現在のディレクトリ(プロジェクト内に多く存在します)を取得し、$ rootパスの数に基づいて次のパス値を取得します。注:パスがすべての場合に「/」で終わることを保証するためにrtrimステートメントを追加しました。/ var / www /より大きい必要があるかどうかはチェックしません。可能な応答として/ var / www /を返すこともできます。