PHP PCアクセス制限
アクセス振り分けPHPですが、
以下のように直してみました。
ですが、
↓こんなエラーが出てしまいました。
Parse error: syntax error, unexpected '}' in /index.php on line 89
<?php
if (isDoCoMoIP()) {
}
if (isAuIP()) {
}
if (isSoftBankIP()) {
}
function isDoCoMoIP(){
require_once 'Net/IPv4.php';// PEAR Net_IPv4
{
//DoCoMo のIP帯域をセット
$ip_list = array(
'210.153.84.0/24',
'210.136.161.0/24',
'210.153.86.0/24',
'124.146.174.0/24',
'124.146.175.0/24'
);
foreach ($ip_list as $ip) {
if (Net_IPv4::ipInNetwork($_SERVER['REMOTE_ADDR'], $ip)) {
print "DoCoMo";
return true;
}
}
}
}
function isAuIP(){
require_once 'Net/IPv4.php';// PEAR Net_IPv4
{
// au のIP帯域をセット
$ip_list = array(
'210.230.128.224/28',
'121.111.227.160/27',
'61.117.1.0/28',
'219.108.158.0/27',
'219.125.146.0/28',
'61.117.2.32/29',
'61.117.2.40/29',
'219.108.158.40/29',
'219.125.148.0/25',
'222.5.63.0/25',
'222.5.63.128/25',
'222.5.62.128/25',
'59.135.38.128/25',
'219.108.157.0/25',
'219.125.145.0/25',
'121.111.231.0/25',
'121.111.227.0/25',
'118.152.214.192/26',
'118.159.131.0/25',
'118.159.133.0/25'
);
foreach ($ip_list as $ip) {
if (Net_IPv4::ipInNetwork($_SERVER['REMOTE_ADDR'], $ip)) {
print "au";
return true;
}
}
}
}
function isSoftBankIP(){
require_once 'Net/IPv4.php';// PEAR Net_IPv4
{
//SoftBank のIP帯域をセット
$ip_list = array(
'123.108.236.0/24',
'123.108.237.0/27',
'202.179.204.0/24',
'202.253.96.224/27',
'210.146.7.192/26',
'210.146.60.192/26',
'210.151.9.128/26',
'210.169.130.112/28',
'210.175.1.128/25',
'210.228.189.0/24',
'211.8.159.128/25'
);
foreach ($ip_list as $ip) {
if (Net_IPv4::ipInNetwork($_SERVER['REMOTE_ADDR'], $ip)) {
print "SoftBank";
return true;
}
}
}
}
return false;
}
print "PC";
?>
お礼
ご指摘、どうもありがとうございました。
補足
ちなみに、アクセス制限のスクリプトを、全部書くと、下記のようなものになりますが、Perlの関数とPHPの関数で微妙に相違点があるので、うまく動作しないんだと思いますが、どこが間違ってるのか、ご指導いただけますか? ----------------------------------------------- <?php /////////////////////////////////// // アクセス制限(ホスト名を記述)// /////////////////////////////////// $deny = array( "", "", ); axs_check(); # ホスト名取得方式 # --> 0 : $ENV{'REMOTE_HOST'} # --> 1 : gethostbyaddr $gethostbyaddr = 1; // ホスト名が割り出されたかどうか→見つかったら1、見つからなかったら0 #----------------# # ホスト名取得 # #----------------# function get_host(){ $host = $_SERVER{'REMOTE_HOST'}; // REMOTE_ADDRで取得したIPアドレスをDNSで逆引きしたホスト名をあらわす。サーバによっては、REMOTE_HOSTを返さないものもあります。これはサーバの負荷を軽減するためです。 $addr = $_SERVER{'REMOTE_ADDR'}; // クライアントのIPアドレス if($gethostbyaddr){ // 指定したIPアドレスに対応するインターネットホスト名の取得に失敗したら($gethostbyaddrが0だった場合) if ($host === "" || $host === "$addr") { // $host === gethostbyaddr(pack("C4", split(/\./, $addr)), 2); $host = gethostbyaddr(pack("C4", preg_split("/\./", $addr)), 2); // pack→指定された引数を format に基づいて バイナリ文字列にパックします。 split→ドットをセパレータとして、配列に分解 // limit が指定された場合、返される配列には 最大 limit の要素が含まれます。この場合、 最後の要素には string の残りの部分が全て 入っています。. をセパレーターとして、IPアドレスを最大2つの要素の配列に分解し、それをバイナリ文字列にパック var_dump($host); } } if($host === "") { $host = $addr; } } //----------------// // アクセス制限 // //----------------// function axs_check(){ // ホスト名を取得 get_host(); $flag=0; for($i=0; $i<count($deny); $i++){ foreach($deny as $temp){ if(!$temp){ next($temp); } // $denyが空文字列""だったら、次に進む // $value =~ s/\*/\.\*/g; $pattern =~ 's/\*\.\*/g'; // *→直前の文字が0回以上複数回繰り返し出現するパターンとマッチ(正確には直前の文字および文字クラス)// s→文字列を単一行として扱う // g→マッチするものを全て見つける if(preg_match($pattern, $temp[$i])){ $flag=1; last; } // int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] ) pattern で指定した正規表現により subject を検索します。 見つかったら、フラグをオンにしループから抜ける } if($flag) echo("アクセスを許可されていません"); // フラグがオンなら、エラー出力 } } ?>