2015-01-08 49 views
1

我想将URL中的IP地址替换为正常的域名。总之:用域名替换IP

Change 
http://123.456.789.025/images/2015/a/ 

Into 
http://images.domain.com/images/2015/a/ 

任何人都知道如何做到这一点?我在这里找不到它。

谢谢!

+1

的URL输入到你的PHP脚本?你是否已经知道域名,或者你需要通过IP查找名称? –

+0

听起来像是我的一个x-y问题 – andrew

+0

我们知道并且在我们的服务器上运行域。我们只需要更换IP。 – KJS

回答

2

这基本上是不可能的,没有各种哈克方法。如果SPF记录已注册,您可以猜测哪个域与IP相关联,但这非常相似。 IP通常由数百甚至数千甚至更多的域共享。所以如果通过查询名称服务器,你可以发现哪些域名与IP地址相关联,即使那样你也不知道上千个顶级域名中哪一个是正确的。找到我能想到的唯一方法是使用顶级域名(URL)作为URL 以IP作为URL来抓取页面,并比较输出。但是这非常棘手,因为当页面提供动态内容时,输出将会不同(实际上)每个请求。这将强制你必须为链接到IP的每个域做一个请求,直到你有一场比赛。

当然,当你知道了IP的事前,只需创建一个数组:

$ip2domain = array(
    '123.123.123.123' => 'mydomain.com', 
    ... 
); 
$url = 'http://'. $ip2domain['123.123.123.123'] .'/images/2015/a/'; 

编辑我看见你的编辑,你知道域等。在这种情况下,只是解构用php的原生地址parse_url()函数。构造URL,使用http_build_url()

$url = 'http://123.456.789.025/images/2015/a/'; 
$parts = parse_url($url); 
$parts['host'] = 'example.com'; 
$final_url = http_build_url($parts); // http://example.com/images/2015/a 

(有时不负有心人看在php.net代替;))

+0

是的,工作很好。 – alioygur

+1

谢谢乔治!完美的作品! – KJS

0

如果你知道会有永远IP存在(在其他情况下,这将替换查询字符串中一些其他IP):

$url = join($host, preg_split('/\d+\.\d+\.\d+\.\d+/', $url, /*limit*/1))