アクセス制御
特定の情報を学内だけに公開したい場合に,アクセス制御が必要になります。しかし,学外からでも単に「エラー」と表示するのではなく,何らかの別の情報を表示したいことがあります。そのためには,次のようにして閲覧者のIPアドレスを調べます。
例
あなたのIPアドレス 216.73.216.181 は学外のものです
ソース
<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)) {
パスワードによる認証については ユーザ認証 のページをご覧ください。