从完整网址获取域名

时间:2018-03-22 10:08:50

标签: php hyperlink parse-url

我有一个txt文件(links.txt)其中有数千个链接

我想使用以下代码对所有链接进行排序

<?php
    function get_domain($url)
    {
        $pieces = parse_url($url);
        $domain = isset($pieces['host']) ? $pieces['host'] : $pieces['path'];
        if (preg_match('/(?P<domain>[a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})$/i', $domain, $regs)) {
            return $regs['domain'];
        }
            return false;
        }
        print get_domain("http://mail.somedomain.co.uk"); // outputs 'somedomain.co.uk'
?>

如何调用文件1并安排它们并再次保存?

更新

在我的文件(domains.txt)中,大约有10,000个域 我想用上面的代码过滤域名

例如:

在:

http://www.example.com/about
www.example.net/index.php
http://subdomain.example.org/
http://www.example.co/page-1
http://www.example.co.uk

后:

example.com
example.net
example.org
example.co
example.co.uk

1 个答案:

答案 0 :(得分:1)

理论上它很简单:

$file = file('domains.txt');
for ($x=0;$x<count($file);$x++) {
    $file[$x] = get_domain($file[$x]);
}
sort($file);
file_put_contents('domains.txt', $file);

但是,根据域文件的大小,这可能会很慢和/或占用大量资源,甚至可能会崩溃。你没有提到这是一次性还是经常发生的事情,但如果这是一个问题,那么其他解决方案将包括:

  • 保存到数据库中,如@Karlo Kokkak所建议的(关于SO here的一个示例)
  • 如果您有权访问,请使用命令行。如果是这种情况,您可能最好完全跳过PHP并使用命令行函数

注意:如果你选择上面的PHP,你可能需要考虑增加该脚本中的PHP's time limit