phpinfo()が表示されないサーバで、なんとか設定情報を取得する方法

phpinfo()が表示されないサーバで、なんとか設定情報を取得する方法

イメージ

Webアプリケーション開発をしていると、「開発環境ではちゃんと動いたのに本番サーバにアップしたらなぜか動かない」という状況が時々発生します。(発生しちゃいけないんですが、そこはおいておくとして。)

そういった場合にまず確認しなくてはいけないのが、PHPやDBサーバ、HTTPサーバの設定です。
本番と開発環境で何が異なるか対比させると、エラーの原因がおのずと判明することが多いです。

PHPの場合、phpinfo()関数を実行すると様々な情報が出力され一目で確認できるのですが、レンタルサーバによってはセキュリティ上phpinfo()が表示されない場合があります。
そうはいっても、確認しないと前へはすすめません。
そんな場合に備え、ini_get()関数を使った次のようなスクリプトを用意しておくと、phpinfo()同様に情報を取得することができます。

通常、phpinfo()で設定情報を取得するには、たった一行のスクリプトでOKです。

<?php
    echo phpinfo();
?>
phpinfo()の実行結果

これを自力で取得するには、Configuration以下に出力される表のDirective列の文字列を引数にして、ini_get()関数をひとつひとつ実行していく必要があります。
例として、mbstring関連の設定値を取得するスクリプトは次の通りです。

<?php

// Directive列の文字列を配列にまとめる
$directives = array(
	"mbstring" => array(
		"mbstring.detect_order",
		"mbstring.encoding_translation",
		"mbstring.func_overload",
		"mbstring.http_input    pass",
		"mbstring.http_output",
		"mbstring.internal_encoding",
		"mbstring.language",
		"mbstring.substitute_character",
		)
	);

// 設定値を取得する
foreach ($directives["mbstring"] as $v) {
	$info["mbstring"][$v] = ini_get($v);
}
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>myphpinfo()</title>
<meta name="ROBOTS" content="NOINDEX,NOFOLLOW,NOARCHIVE" />
<style type="text/css">
<!-- 略 phpinfo()の出力ソースに合わせています -->
</style>
</head>
<body>
<div class="center">
<h2><a name="module_mbstring">mbstring</a></h2>
<table border="0" cellpadding="3" width="600">
<tr class="h"><th>Directive</th><th>Local Value</th></tr>
<?php 

//取得した設定値を表形式で出力。
foreach ($info["mbstring"] as $k => $v) {
	if ($v == "") {
		$v = "<i>no value</i>";
	}
	echo "<tr><td class=\"e\">{$k}</td><td class=\"v\">{$v}</td></tr>\n";
}
?>
</table>
<br />
</div>
</body>
</html>
myphpinfo()の実行結果

phpinfo()に出力形式を合わせると、より比較しやすくなるのでおすすめです。

最後に、そもそもセキュリティ上公開させていない情報なのですから、確認が終わり次第、スクリプトをサーバ上からすみやかに削除しましょう。
そして、開発の着手前にこのような確認作業は済ませておくのがもっと大事、ですね。

  • このエントリーをはてなブックマークに追加

この記事を読んだ人にオススメ