IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Extraction NDD sans sous-domaine, etc. [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre régulier Avatar de la_chouette
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 183
    Points : 121
    Points
    121
    Par défaut Extraction NDD sans sous-domaine, etc.
    Bonjour,

    je cherche à extraire puis compter les domaines sans prendre en compte les sous-domaines, répertoire, page ...

    Voici un échantillon d'une liste d'urls:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    $uri = array(
    'http://www.domaine.com',
    'http://www.domaine.com',
    'http://www.domaine.com/page.php',
    'http://www.domaine.com/directory/',
    'http://www.domaine.com/directory/page.php',
    'http://www.subdomaine.domaine.com/',
    'http://www.subdomaine.domaine.com/page.php',
    'http://www.subdomaine.domaine.com/directory/',
    'http://www.subdomaine.domaine.com/directory/',
    'http://www.subdomaine.domaine.com/directory/page.php',
    'http://www.subdomaine.subdomaine.domaine.com/',
    'http://www.subdomaine.subdomaine.domaine.com/page.php',
    'http://www.subdomaine.subdomaine.domaine.com/directory/',
    'http://www.subdomaine.subdomaine.domaine.com/directory/page.php',
    'http://domaine.us',
    'http://domaine.us/page.php',
    'http://domaine.us/directory/',
    'http://domaine.us/directory/',
    'http://domaine.us/directory/page.php',
    'http://subdomaine.domaine.us/',
    'http://subdomaine.domaine.us/page.php',
    'http://subdomaine.domaine.us/directory/',
    'http://subdomaine.domaine.us/directory/',
    'http://subdomaine.domaine.us/directory/page.php',
    'http://subdomaine.subdomaine.domaine.us/',
    'http://subdomaine.subdomaine.domaine.us/page.php',
    'http://subdomaine.subdomaine.domaine.us/directory/',
    'http://subdomaine.subdomaine.domaine.us/directory/page.php');
    le résultat voulu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    2 domaines trouvés (domaine.com et domaine.us)
    J'ai donc tester avec différents masques et parse_url mais je n'arrive pas obtenir le résultat souhaiter.

    Merci pour votre aide.

  2. #2
    Membre régulier Avatar de la_chouette
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 183
    Points : 121
    Points
    121
    Par défaut
    Voici la solution:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    $uri = array(
    'www.domaine.com',
    'www.domaine.com',
    'www.domaine.com/page.php',
    'www.domaine.com/directory/',
    'www.domaine.com/directory/page.php',
    'www.subdomaine.domaine.com/',
    'www.subdomaine.domaine.com/page.php',
    'www.subdomaine.domaine.com/directory/',
    'www.subdomaine.domaine.com/directory/',
    'www.subdomaine.domaine.com/directory/page.php',
    'www.subdomaine.subdomaine.domaine.com/',
    'www.subdomaine.subdomaine.domaine.com/page.php',
    'www.subdomaine.subdomaine.domaine.com/directory/',
    'www.subdomaine.subdomaine.subdomaine.domaine.com/directory/page.php',
    'http://82.64.39.203/directory/',
    'http://domaine.us',
    'http://domaine.us/page.php',
    'http://domaine.us/directory/',
    'http://domaine.us/directory/',
    'http://domaine.us/directory/page.php',
    'http://subdomaine.domaine.us/',
    'http://subdomaine.domaine.us/page.php',
    'http://subdomaine.domaine.us/directory/',
    'http://subdomaine.domaine.us/directory/',
    'http://subdomaine.domaine.us/directory/page.php',
    'http://subdomaine.subdomaine.domaine.us/',
    'http://subdomaine.subdomaine.domaine.us/page.php',
    'http://subdomaine.subdomaine.domaine.us/directory/',
    'http://subdomaine.subdomaine.domaine.us/directory/page.php');
     
    // Delete duplicate
    $uri = array_unique($uri);
     
    function format_url($url){
        $nburl = count($url);
        for($i=0;$i<$nburl;$i++){
            if(array_key_exists($i, $url)){
                preg_match("/^(http:\/\/)?([^\/]+)/i",$url[$i],$chaines);
     
                if(preg_match('/\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/', $chaines[2],$domaines))
                    preg_match('/\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/', $chaines[2],$domaines);
                else
                    preg_match("/[^\.\/]+\.[^\.\/]+$/",$chaines[2],$domaines);
     
                $host[] = $domaines[0];
            }
        }
     
        $host = array_unique($host);
     
        //Debug
        //echo var_dump($host);
     
        return $host;
    }
    echo 'Nbr domaine: ' . count(format_url($uri));
    Compte le nombre de domaine/ip en filtrant les sous-domaines, répertoires, pages éventuelles ...

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Array
    (
        [0] => domaine.com
        [12] => 82.64.39.203
        [13] => domaine.us
    )
     
    Nbr domaine: 3
    Merci à WibiMaster pour sont aide

    Si quelqu'un pense pourvoir simplifier/améliorer le code je suis ouvert ...

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 56
    Points : 36
    Points
    36
    Par défaut
    Citation Envoyé par la_chouette Voir le message
    Merci à WibiMaster pour sont aide
    C'est marrant ça, je cherchais sur Google comment arriver à ce résultat, et je tombe sur ce post où j'aurais donné la solution...
    M'en souvenais pas, merci à toi de l'avoir posté huhu

    [edit] T'es sûre que j'ai fait ça ? J'ai du mal à comprendre le pourquoi du array_key_exists, et ce double preg_match avec le if, ça pique un peu les yeux... J'pense que ça peut pas mal se simplifier, à voir J'ai aussi un doute sur le fait que ça fonctionne avec des URL de type "blabla.co.uk" par exemple..

  4. #4
    Membre régulier Avatar de la_chouette
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 183
    Points : 121
    Points
    121
    Par défaut
    Oui, le code est bien de toi (chat dev)...

    Si tu pense pouvoir le simplifier je suis partant, sinon il fonctionne bien...

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    juste

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    $domains = array();
     
    foreach ($uri as $link) {
        if (strpos($link, 'http://') !== 0) {
            $link = 'http://'.$link;
        }
     
        $host = parse_url($link, PHP_URL_HOST);
     
        if (filter_var($host, FILTER_VALIDATE_IP)) {
            $domain = $host;
        } else {
            preg_match('/[^.]+\.[^.]+$/', $host, $matches);
            $domain = current($matches);
        }
     
        if (false === in_array($domain, $domains)) {
            $domains[] = $domain;
        }
    }

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 56
    Points : 36
    Points
    36
    Par défaut
    @stealth35 :
    Ton code subit le même défaut, si l'on test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $uri = array(
    	'http://www.test.co.uk',
    	'http://www.test.fr',
    	'http://test.fr',
    	'http://test.co.uk',
    );
    Cela ressort :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    array
      0 => string 'co.uk' (length=5)
      1 => string 'test.fr' (length=7)
    @la_chouette :
    Je te crois

    Bon ben reste plus qu'à trouver un truc fiable, eheh

    edit :
    Existe-t-il une liste exhaustive des différentes extensions de domaines sur chaque niveau ?
    Comme celle-ci :
    https://wiki.mozilla.org/TLD_List

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [RegEx] Récupérer nom de domaine sans les sous domaine
    Par fabien14 dans le forum Langage
    Réponses: 2
    Dernier message: 16/01/2016, 13h15
  2. Rediriger des ports sans sous-domaines
    Par EthanPlg dans le forum Apache
    Réponses: 3
    Dernier message: 19/01/2015, 00h14
  3. Réponses: 5
    Dernier message: 26/01/2010, 15h49
  4. Url rewriting + sous domaine + sans modif URL
    Par ReivaxHerica dans le forum Apache
    Réponses: 4
    Dernier message: 26/01/2009, 13h44
  5. Réponses: 4
    Dernier message: 09/01/2008, 00h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo