php localhost怎么用,如何检测用户是否在PHP中的localhost上?

如果您想拥有支持静态IP和动态名称的白名单/允许列表。

例如:

$whitelist = array("localhost", "127.0.0.1", "devel-pc.ds.com", "liveserver.com");

if (!isIPWhitelisted($whitelist)) die();

通过这种方式,您可以设置能够(肯定)检测到的名称/ IP列表。动态名称为从不同点访问添加了更多灵活性。

这里有两个常用选项,您可以在本地主机文件中设置名称,也可以只使用一个可以在任何地方找到的动态名称提供程序。

此函数CACHES结果是因为gethostbyname是一个非常慢的函数。

为此,我实现了这个功能:

function isIPWhitelisted($whitelist = false)

{

if ( isset($_SESSION) && isset($_SESSION['isipallowed']) )

{ return $_SESSION['isipallowed']; }

// This is the whitelist

$ipchecklist = array("localhost", "127.0.0.1", "::1");

if ($whitelist) $ipchecklist = $whitelist;

$iplist = false;

$isipallowed = false;

$filename = "resolved-ip-list.txt";

$filename = substr(md5($filename), 0, 8)."_".$filename; // Just a spoon of security or just remove this line

if (file_exists($filename))

{

// If cache file has less than 1 day old use it

if (time() - filemtime($filename) <= 60*60*24*1)

$iplist = explode(";", file_get_contents($filename)); // Read cached resolved ips

}

// If file was not loaded or found -> generate ip list

if (!$iplist)

{

$iplist = array(); $c=0;

foreach ( $ipchecklist as $k => $iptoresolve )

{

// gethostbyname: It's a VERY SLOW function. We really need to cache the resolved ip list

$ip = gethostbyname($iptoresolve);

if ($ip != "") $iplist[$c] = $ip;

$c++;

}

file_put_contents($filename, implode(";", $iplist));

}

if (in_array($_SERVER['REMOTE_ADDR'], $iplist)) // Check if the client ip is allowed

$isipallowed = true;

if (isset($_SESSION)) $_SESSION['isipallowed'] = $isipallowed;

return $isipallowed;

}

为了更好的可靠性,你可以用@Pekka在帖子中提到的get_ip_address()取代$ _SERVER ['REMOTE_ADDR']作为“这个赏金问题”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值