Expressão regular PHP para obter endereço IP de /etc/hosts
Pergunta
Estou escrevendo um script PHP que configura automaticamente um dispositivo via Telnet e preciso obter alguns endereços IP de /etc/hosts
Preciso pegar apenas o endereço IP e atribuí-lo a uma variável com base no nome dos hosts.Exemplo:
192.168.1.50 machine
192.168.1.51 printer
192.168.1.52 sigpad
O script PHP deve ficar assim:
$machineip = "192.168.1.50";
$printerip = "192.168.1.51";
$sigpadip = "192.168.1.52";
Claro, meu /etc/hosts
arquivo é diferente, mas você entenderá o meu exemplo.Poderei então incluir este script PHP em qualquer um de nossos programas existentes e usar as variáveis em vez de endereços IP codificados.
Solução
function ipFromEtcHosts($host) {
foreach (new SplFileObject('/etc/hosts') as $line) {
$d = preg_split('/\s/', $line, -1, PREG_SPLIT_NO_EMPTY);
if (empty($d) || substr(reset($d), 0, 1) == "#")
continue;
$ip = array_shift($d);
$hosts = array_map('strtolower', $d);
if (in_array(strtolower($host), $hosts))
return $ip;
}
}
Exemplo:
echo ipFromEtcHosts('ip6-mcastprefix');
dá ff00::0
.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow