誰でも悩み上記のコードを見つけることを有している場合には@Uffeによって提案されているように、私は以下を含めました:
<?php
/**
* Check if a client IP is in our Server subnet
*
* @param string $client_ip
* @param string $server_ip
* @return boolean
*/
function clientInSameSubnet($client_ip=false,$server_ip=false) {
if (!$client_ip)
$client_ip = $_SERVER['REMOTE_ADDR'];
if (!$server_ip)
$server_ip = $_SERVER['SERVER_ADDR'];
// Extract broadcast and netmask from ifconfig
if (!($p = popen("ifconfig","r"))) return false;
$out = "";
while(!feof($p))
$out .= fread($p,1024);
fclose($p);
// This is to avoid wrapping.
$match = "/^.*".$server_ip;
$match .= ".*Bcast:(\d{1,3}\.\d{1,3}i\.\d{1,3}\.\d{1,3}).*";
$match .= "Mask:(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/im";
if (!preg_match($match,$out,$regs))
return false;
$bcast = ip2long($regs[1]);
$smask = ip2long($regs[2]);
$ipadr = ip2long($client_ip);
$nmask = $bcast & $smask;
return (($ipadr & $smask) == ($nmask & $smask));
}
ここでは自分自身をIPv4に制限しています。今日では、それだけでは不十分です。あなたは a)IPv6でも快適になり、 b)定義のリストを定義します。「ローカル」とは何ですか?本当に192.168。*だけです。独自のIPを持つネットワーク内にいる場合はどうなりますか?または10. *ネットワーク内? – glglgl
[IPが外部であるかどうかを知る方法]の複製可能性(http://stackoverflow.com/questions/14125735/how-to-know-if-an-ip-is-external-or-not) – user956584