2017-04-07 127 views
1

我有一臺主機的= http://172.19.242.32:1234/精確的IP地址了主機URL

我的目標是搶IP只= 172.19.242.32

我試圖

$ip = trim($host,'http://'); 
$ip = str_replace("/", "",$ip); 
$ip = explode(":",$ip); 
$ip = $ip[0]; 

我得到了我的IP爲預計,但我不能這樣做了,因爲它會搞亂IPv6格式。

什麼是替代方法?任何建議?

+2

['parse_url()'](http://php.net/manual/en/function.parse-url.php) –

+0

或者正則表達式'/ [\ d。] +(?=:)/' – Mohammad

+0

[在PHP中解析域名的URL]可能的重複(https://stackoverflow.com/questions/276516/parsing-domain-from-url-in-php) – mickmackusa

回答

4

使用parse_url():您可以省略PHP_URL_HOST以返回所有組件的數組。

<?php 
$host = 'http://172.19.242.32:1234/'; 
echo parse_url($host, PHP_URL_HOST); 

返回

172.19.242.32 

https://eval.in/770497

+0

這將與IPv6協同工作嗎?防爆。 'host = http:// [fd8c :: 11]:1234 /' – ihue

+1

它返回''[fd8c :: 11]''。 – alistaircol

+0

太棒了,那麼這是正確的答案。我會盡快接受。 – ihue

-2

正確的方法是$_SERVER['SERVER_ADDR']我想?它應該只返回IP

+1

這將返回服務器的IP地址,當前腳本正在執行。 OP要求從某個字符串獲取IP地址。 –

+0

他說他有一個主持人,我把它解釋爲他自己的主人,腳本在哪裏運行。 – junkfoodjunkie

1
$url="http://172.19.242.32:1234/"; 
$regexIpAddress = '/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(?:\/\d{2})?/';   
preg_match_all($regexIpAddress, $url, $ip_match); 
var_dump($ip_match[0]); 

這reg表達式匹配功能將來自任何字符串中提取的IP地址。

+0

太複雜了,\t 請問這個工作與IPv6?防爆。 host = http:// [fd8c :: 11]:1234 /? – ihue

+0

這是IPv4正則表達式匹配。 –