Если вы хотите иметь белый / разрешительный список , который поддерживает статические IP-адреса и динамические имена .
Например:
$whitelist = array("localhost", "127.0.0.1", "devel-pc.ds.com", "liveserver.com");
if (!isIPWhitelisted($whitelist)) die();
Таким образом, вы можете установить список имен / IP-адресов , которые будут (наверняка) обнаружены. Динамические имена обеспечивают большую гибкость для доступа из разных точек.
У вас есть две общие опции: вы можете указать имя в файле local hosts или просто использовать один поставщик динамических имен , который можно найти где угодно.
Эта функция возвращает 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;
}
Для большей надежности вы можете заменить $ _ SERVER ['REMOTE_ADDR'] на get_ip_address () , который @Pekka упомянул в своем сообщении как "этот вопрос щедрости"