WEB開発や保守のノートと役に立つツール等の紹介

Flexion DevNote

月: 2024年11月

【PHP】IPアドレス範囲の判定はこうだった

GoogleやBingのBotに対してログを残さないようにしていますが、PHPでIP範囲を特定し無効化する必要があったため、functionをつくってみました

//IP範囲チェック
function chkIpRange($accept){

  $remoteIp   = $_SERVER['REMOTE_ADDR'];

  list($acceptIp, $mask) = explode('/', $accept);
  $acceptLong = ip2long($acceptIp) >> (32 - $mask);
  $remoteLong = ip2long($remoteIp) >> (32 - $mask);
  if ($acceptLong == $remoteLong) {
    return 1;
  } else {
    return 0;
  }
}


$rec	= 0;

//Botチェック(以下はGoogleなどのIP群)
if( chkIpRange('66.249.64.0/19') ) $rec	= 1;
if( chkIpRange('66.249.92.0/24') ) $rec	= 1;
if( chkIpRange('72.14.192.0/18') ) $rec	= 1;
if( chkIpRange('74.125.0.0/16') ) $rec	= 1;

//処理飛ばす
if($rec == 1) return;

アクセスしてきたIPアドレスが、サブネットマスクを含んだ指定のIPアドレスに該当するものかどうか、これで判断して処理を分けることができまいした。

【php】simplexml_load_file が突然動かなくなった?(自己署名証明書を許容する必要があった)

ブログサイトから/?feed=rss2で取り込み後、自社DBにセットするバッチが急に動かくなりました。
file_get_contentsやcurlで、いろいろ試行錯誤もしましたが、成功に至らず。。。

結論、以下のように、自己署名証明書を許容する必要がありました。

$url     = 'https://xxx.com/?feed=rss2';
$context = stream_context_create(array('ssl'=>array(
    'allow_self_signed'=> true,
    'verify_peer'      => false,
)));
libxml_set_streams_context($context);
$xml = simplexml_load_file($url);

//print_r($xml)
//うまく動けました

ちなみに、 file_get_contents もSSL処理に似ている感じでした

$postUrl    = 'https://xxx.com/xxx/index.php';
$postPost   = array('xxx' => yyy);
$postData   = http_build_query($postPost, "", "&");
$postHeader = array(
  "Content-Type: application/x-www-form-urlencoded",
  "Content-Length: ".strlen($postData)
);
					
$postOptions = array(
  'http' =>array(		
    'method'  => 'POST',
    'header'  => implode("\r\n", $postHeader),
    'content' => $postData
  ),
  //SSL処理
  'ssl' =>array(
    'verify_peer'       => false,
    'verify_peer_name'  => false
  )
);

$postJson  = file_get_contents($postUrl, false, stream_context_create($postOptions));
$postArr   = json_decode($postJson, true);

//print_r($postArr)



Powered by WordPress & Editor by Flexion Counsulting Inc.