LoginSignup
1
0

More than 1 year has passed since last update.

$_SERVER['DOCUMENT_ROOT']に関する考察 そもそもドキュメントルートって?

Last updated at Posted at 2022-10-28

Movable Type引っ越しシミュレーションをする際に、$_SERVER['DOCUMENT_ROOT']で引っかかったので考察を記す。

今回は、エックスサーバーで検証してみよう。

まず、ドキュメントルートを表示するためのindex.phpを準備する。

<?php
echo $_SERVER['DOCUMENT_ROOT'];

これを下記の①~③の、階層が異なるディレクトリに置いて挙動を検証する。

ちなみに、エックスサーバーのホームディレクトリは、/home/ユーザー名 である。

①/home/ユーザー名/hoge.com/public_html/index.php

結果

/home/ユーザー名/hoge.com/public_html

②/home/ユーザー名/hoge.com/public_html/dir/index.php

結果

/home/ユーザー名/hoge.com/public_html

③/home/ユーザー名/hoge.com/public_html/dir/dir2/index.php

結果

/home/ユーザー名/hoge.com/public_html

つまり、異なる階層でドキュメントルートを呼び出しても、結果は全部同じになる。

そう、ドキュメントルートとは、「公開されるディレクトリの最上部」なのである。。。
※厳密に言うと、「現在実行されているスクリプトが存在するドキュメントルート ディレクトリ」

私はいったい何を言いたかったのか

冒頭で書いたMovable Typeのindex.phpの中身はこうだ。

<?php
$title = 'home';
$page_meta_keywords = 0;
$page_meta_description = 0;
require_once $_SERVER['DOCUMENT_ROOT'] . '/module/config/config.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/module/config/require.php';

ob_start();
if (DEVICE_TYPE === 'mobile' && MT_MOBILE_USE === '1') {
	require_once $_SERVER['DOCUMENT_ROOT'] . '/module/template/mobile/config.php';
	require_once $_SERVER['DOCUMENT_ROOT'] . '/module/template/mobile/parts/header.php';
	require_once $_SERVER['DOCUMENT_ROOT'] . '/module/template/mobile/layout/main_index.php';
	require_once $_SERVER['DOCUMENT_ROOT'] . '/module/template/mobile/parts/footer.php';
} elseif (DEVICE_TYPE === 'sphone' && MT_SPHONE_USE === '1') {
	require_once $_SERVER['DOCUMENT_ROOT'] . '/module/template/sphone/config.php';
	require_once $_SERVER['DOCUMENT_ROOT'] . '/module/template/sphone/parts/header.php';
	require_once $_SERVER['DOCUMENT_ROOT'] . '/module/template/sphone/layout/main_index.php';
	require_once $_SERVER['DOCUMENT_ROOT'] . '/module/template/sphone/parts/footer.php';
} else {
	require_once $_SERVER['DOCUMENT_ROOT'] . '/module/template/default/parts/html_header.php';
	require_once $_SERVER['DOCUMENT_ROOT'] . '/module/template/default/parts/header.php';
	require_once $_SERVER['DOCUMENT_ROOT'] . '/module/template/default/layout/main_index.php';
	require_once $_SERVER['DOCUMENT_ROOT'] . '/module/template/default/parts/sidebar.php';
	require_once $_SERVER['DOCUMENT_ROOT'] . '/module/template/default/parts/footer.php';
}
$output = ob_get_contents();
ob_end_clean();

//携帯サイトは文字コード変換
if (DEVICE_TYPE === 'mobile' && MT_MOBILE_USE === '1') {
	$output = mb_convert_encoding($output, 'Shift_JIS', 'UTF-8');
}

// 出力
echo $output;

そう。$_SERVER['DOCUMENT_ROOT'] だらけだ。

私はシミュレーションの都合上、ドキュメントルートの直下にディレクトリを作り(/home/ユーザー名/hoge.com/public_html/aaa/)、そこにMovableTypeをアップロードしていた。

しかし、5行目でエラーで引っかかる。

そう。MovableTypeは、ドキュメントルート、つまりpublic_htmlの直下にアップロードしないといけないのだ。

それを言いたかったのである。。。
以上。

1
0
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0