アクセス制御

特定の情報を学内だけに公開したい場合に,アクセス制御が必要になります。しかし,学外からでも単に「エラー」と表示するのではなく,何らかの別の情報を表示したいことがあります。そのためには,次のようにして閲覧者のIPアドレスを調べます。

あなたのIPアドレス 18.217.67.225 は学外のものです

ソース

<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)AB の最初の 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)) {

パスワードによる認証については ユーザ認証 のページをご覧ください。