/ *クライアントが許容範囲のIP * /内にあるかどうか確認してください
{)(パブリックcheckip機能
もし(セッション::( 'ALLOWACCESS')を取得する){
trueを返します。
}
$モデル=新しいItemModel();
$ asInfo = $モデル- > getInfoBy([ 'コード' => 'ALLOW_SERVICE'、 'group_code' => 'SECURITY'])。
$ [ '値'] $ asInfo =有効?'';
もし(!$有効= 1){
セッション::セット( 'ALLOWACCESS'、TRUE);
$モデル= NULL;
trueを返します。
}
$情報= $モデル- > getInfoBy([ 'コード' => 'MANAGE_HOST'、 'group_code' => 'SECURITY'])。
$ホスト=( "\ nを"、$インフォ[ '値を'])爆発; //分割字符串
$ IP =の$ this - > getHostIp();
$のtagvar =偽;
$としてforeachの($ホストキー=>
(falseに=== strpos($アルバル、 "/"))IF {
//同じIP一致
IF(== $ $アルバルIP)
trueに{$ = tagvarを、続行;}
} {他に
//マッチングネットワークの下でIPに属し
$ varipnet =の$ this - > ip_in_network(IPの$、$アルバル);
IF($のvaripnet)
{trueに$ = tagvar;続行;}
}
}
IF(trueに== $のtagvar){
セッション:: SET(「ALLOWACCESS 'trueに);
} {他には、
セッション:: SET(' falseにALLOWACCESS'、);
}
$モデル= NULL;
戻りの$ tagvar;
}
/ *
*取得し、クライアントのIPアドレス
*
* /
パブリックgetHostIp機能()
{
// TP組み込み関数クライアントIP取得するために
$ IP =リクエスト() - > IPを();
IPを$を返す;
}
/ **
* IPか否かが判断されますネットワークセグメント内
* @param $ IP 10.0.0.135ローカルIP
* @paramネットワーク10.0.0.0/24 $
* /
パブリック関数ip_in_network(腹腔$、$ネットワーク)
{
$ IP =(ダブル)(はsprintf( "%U"、ip2long($ IP)));
$ Sが爆発=( '/' $ネットワーク);
$ network_start =(ダブル)(のsprintf( "%U"、ip2long($ S [0]))) ;
$ network_len = POW(2、32 - $ Sが[1]);
$ network_end = $ + $ network_len network_start - 1;
IF(IP $> = $ $ network_start && IP <= $ network_end)
{
trueを返し、このセグメントは、この結果に属し//マシンのIPが返されます1。
}
リターンをfalseに; //マシンのIPこのセグメントは、0が返され、この結果に属し
}