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の直下にアップロードしないといけないのだ。
それを言いたかったのである。。。
以上。