2012-10-20 8 views
5

C'è un modo per rilevare se una stringa è un IP o dominio utilizzando php, esempio di seguito.PHP se funzione di rilevamento IP o dominio

$string = "http://192.168.0.0"; 
$string = "http://example.com"; 

Quindi, se la stringa è un IP lo script/funzione farà qualcosa se rileva come Domain farà qualcosa di diverso.

Grazie

+0

Questo in genere viene eseguito utilizzando le espressioni regolari. Troverai milioni di esempi su google. – arkascha

risposta

5

È possibile verificare semplicemente in questo modo:

$isIP = (bool)ip2long($_SERVER['HTTP_HOST']); 

La funzione ip2long tornerà false è host non è un indirizzo IP valido come nome di dominio. Il vantaggio dell'utilizzo della funzione ip2long è che convalida anche l'indirizzo IP fornito. Quindi per esempio l'indirizzo 4.4.4.756 ti darà false.

Quindi, per testare una data stringa si può fare:

$string = "http://192.168.0.0"; 
$parts = parse_url($string); 
$isIP = (bool)ip2long($parts['host']); 
+0

Tuttavia la domanda era riferita a stringhe date in possesso di un url ... – arkascha

+1

Giusto, aggiornato, ti thnak. – dfsq

1

È possibile utilizzare le espressioni regolari.

Qui si possono trovare ad esempio:

Regular expression to match DNS hostname or IP Address?

modelli Codice/regex:

ValidIpAddressRegex = "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"; 

ValidHostnameRegex = "^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$"; 

Come usare espressioni regolari in PHP:

preg-match manual at php.net

1

anche voi confrontare HTTP_HOST e SERVER_ADDR. Per IP v6 è necessario anche ritagliare le parentesi quadre su HTTP_HOST.

$isIP = @($_SERVER['SERVER_ADDR'] === trim($_SERVER['HTTP_HOST'], '[]')); 

sembra essere più efficiente di espressioni regolari, ma non sono sicuro se aproach ip2long sarebbe più efficiente.