アクセス制御
特定の情報を学内だけに公開したい場合に,アクセス制御が必要になります。しかし,学外からでも単に「エラー」と表示するのではなく,何らかの別の情報を表示したいことがあります。そのためには,次のようにして閲覧者のIPアドレスを調べます。
例
あなたのIPアドレス 3.238.82.77 は学外のものです
ソース
<p> <?php $x = $_SERVER['REMOTE_ADDR']; echo "あなたのIPアドレス $x は"; if (strncmp($x, "133.67.", 7) == 0) { echo "学内のものです"; } else { echo "学外のものです"; } ?> </p>
解説
三重大学では 133.67.*.*
をアドレスとして使っています(*
は任意の値)。それ以外のアドレスは学外です。strncmp(A, B, n)
は A
と B
の最初の n
文字を比較し,一致していれば 0 を返します。
echo "..."
の中に書くものが多いと,上の書き方では面倒です。
次のような書き方が便利です。
<p> <?php $x = $_SERVER['REMOTE_ADDR']; if (strncmp($x, "133.67.", 7) == 0) { echo <<<EOT あなたは学内からですね。 あいうえお かきくけこ EOT; } else { echo <<<EOT あなたは学外ですね。 さしすせそ たちつてと EOT; } ?> </p>
ここでは EOT
という文字列を区切りに使いましたが,文章中に現れないことばなら何でもかまいません。
あるいは次のようにもできます。
<?php $x = $_SERVER['REMOTE_ADDR']; if (strncmp($x, "133.67.", 7) == 0) { ?> <p>あなたは学内からですね。あいうえおかきくけこ。</p> <?php } else { ?> <p>あなたは学外からですね。さしすせそたちつてと。</p> <?php } ?>
strncmp()
より強力な正規表現を使った文字列照合関数として preg_match()
があります。これは次のように使います:
if (preg_match("/^133\.67\./", $x)) {
パスワードによる認証については ユーザ認証 のページをご覧ください。