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 :

[Mail] comment vérifier entierement une url ?


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Points : 144
    Points
    144
    Par défaut [Mail] comment vérifier entierement une url ?
    Bonjour

    Je cherche une portion de code permettant de vérifier une url..

    Merci
    Bonne soirée

  2. #2
    Fabouney
    Invité(e)
    Par défaut
    Pour quel usage souhait tu vérifier une url ... ? soit plus clair dans ton explication.

  3. #3
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Points : 144
    Points
    144
    Par défaut
    euh ben c'est dans un formulaire, pour pas que les adresses qu'on m'envoie soit des fausses urls...

  4. #4
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    Il me semble que la norme SMTP inclut une méthode pour deander à un sereur mail si une adresse précise existe, cependant je ne suis pas convaincu que tous les serveurs l'implémentent. On m'en a parlé une fois, je n'ai jamais vérifié.

    Ce serait la meilleure solution pour toi mais, vu que ce n'est pas fiable, tu devras probablement passer par des expressions régulières.

    Je pnse que le mieux serait de te documenter dessus, c'est toujours très intéressant de se pencher là-dessus et, en outre, je suis persuadé que quelqu'un l'a déjà fait sur développez.com et que tu trouveras facilement ton bonheur.

  5. #5
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Points : 144
    Points
    144
    Par défaut
    Slt

    J'ai essayé de me mettre aux expressions régulieres et j'ai fait quelque chose, pouvez-vous me dire si c'est correct svp ?

    Donc en fait, ce qu'on veut vérifier dans une url, c'est que ca commence bien par http:// donc on a ^http://
    Ensuite, on peut avoir n'importe quels caracteres (lettres,chiffres) donc on a [a-zA-Z]
    Et pour finir, il faut qu'il soit du type .extension donc j'ai mis : [(.fr)|(.com)|(.net)|(.org)|(.biz)|(.info)|(.be)]$

    Ce qui donne au final :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ^http://[a-zA-Z][(.fr)|(.com)|(.net)|(.org)|(.biz)|(.info)|(.be)]$
    Qu'est-ce que je pourrais changer pour l'améliorer ?

    Merci
    ++

  6. #6
    Fabouney
    Invité(e)
    Par défaut
    bonjour,

    vérification s'il y a http:// au début puis au moins un caractère, puis un '.' puis de nouveau au moins un caractère et enfin un '.fr' ou '.com' ou '.net' ou bien '.org'.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ^http://([_a-zA-Z0-9])+(\.[_a-zA-Z0-9])+(\.fr)|(\.com)|(\.org)|(\.net)"

  7. #7
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Points : 144
    Points
    144
    Par défaut
    ah oki c'était totalement faux alr..

    Mais euh ca sert a quoi le _ devant a-zA-Z0-9 ??
    Et le \. ?

    Merci
    ++

  8. #8
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Points : 1 164
    Points
    1 164
    Par défaut
    a-zA-Z0-9
    Indique les caractères autoriés. ici cesont toutes les lettre de a à z, A à Z, et les chiffres de 0 à 9.
    Donc pas d'accent par exemple !

    Le _ devant, c'est juste pour ajouter _ à la liste des caractères autorisés.

    Pour le \.
    En fait le . tout seul, dansune regexp, represente tout les carateres (c'estun joker), seulement la on ne veut que le caratere . pour faire cela on l'echappe avec \
    Donc la séquence \. ne représente qu'un caractère le point.

    Par contre
    ^http://([_a-zA-Z0-9])+(\.[_a-zA-Z0-9])+(\.fr)|(\.com)|(\.org)|(\.net)"
    ne fonctionne pas avec
    http://www.ece.vt.edu/network/dns-format.html par exemple.
    ^http://([_a-zA-Z0-9]+(\.)){*}+(\.fr)|(\.com)|(\.org)|(\.net)"
    Je serait tenté de faire quelque chose comme cela.
    Mais c'est peut être pas bon :s

  9. #9
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Points : 144
    Points
    144
    Par défaut
    oki oki merci c'est plus clair

    J'ai un petit probleme pour la suite, en fait j'aimerais vérifier que le nom de domaine existe réellement, donc j'ai fait ce code mais ca marche pas pourquoi ?



    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
    <?php
    $url = 'http://<a href="http://www.developpez.net&#39;;" target="_blank">www.developpez.net';</a>
     
    $r = '^http://([_a-zA-Z0-9])+(\.[_a-zA-Z0-9])+(\.fr)|(\.com)|(\.org)|(\.net)|(\.info)|(\.biz)|(\.be)';
     
    if(eregi($r,$url)) // Si l'url correspond bien a quelque chose du type http:// puis caractere puis point puis caractere puis extensions (.com etc)
    	{
    		/* On récupère le nom de domaine */
     
     		if(eregi('^http://www.',$url)) // Si l'url est avec le www
    			{ 
    				list($http, $domaine) = split ("www.", $url, 2); // On coupe en deux après le www pour avoir le domaine
    			}
    			else
    			{
    				list($http, $domaine) = split ("http://", $url, 2); // Sinon on coupe en deux après le http://
    			}
     
    		if(checkdnsrr($domaine, "MX")) 
    			{
                	return 1; // valide
    				echo' domaine ok';
            	}
            	else 
    			{
                	return 0; // non valide
    				echo'domaine non valide';
            	}
    			echo'ok';
    	}
    	else
    	{
    		return 0; // non valide
    		echo'non';
    	}
    ?>
    Merci
    ++

  10. #10
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Points : 1 164
    Points
    1 164
    Par défaut
    checkdnsrr($domaine, "MX")
    Pourquoi tu teste sur le MX ? c'est pas pour les mails sa ?

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Non, il a bien recours à une fonction réseau souvent utilisée pour vérifier si le nom de domaine d'un email existe bien. MX étant le type par défaut ...

    Par contre, attention, cette fonction vérifie si un nom de domaine est enregistré sur les DNS mais ne vérifie pas si le site lié existe ou pas.
    Il faut alors faire attention à l'usage de cette fonction.

    Si c'est pour vérifier si une page existe ou pas, je te conseille d'y rajouter une requete par socket sur l'adresse et tu vérifies le header ( page 404 ... ).

  12. #12
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    essaie qqch comme ça si tu as CURL installé.

    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
     
    	function checkUrl($url) {
    		$c = curl_init($url);
    		curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
    		curl_setopt($c, CURLOPT_NOBODY, 1);
    		curl_setopt($c, CURLOPT_FOLLOWLOCATION, 1);
    		curl_setopt($c, CURLOPT_MAXREDIRS, 3);
    		curl_setopt($c, CURLOPT_CONNECTTIMEOUT, 10);
    		curl_setopt($c, CURLOPT_TIMEOUT, 10);
    		curl_setopt($c, CURLOPT_HEADER, 1);
    		curl_setopt($c, CURLOPT_USERAGENT, 'PHP');
    		$page = curl_exec($c);
    		$info = curl_getinfo($c);
    		curl_close($c);
    		return array($page, $info);
    	}
     
    list($page, $info) = checkUrl('tonurl');
    echo $info['http_code'];

  13. #13
    Membre averti Avatar de XtofRoland
    Profil pro
    Inscrit en
    Août 2005
    Messages
    357
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 357
    Points : 392
    Points
    392
    Par défaut
    Citation Envoyé par italiasky
    Slt

    J'ai essayé de me mettre aux expressions régulieres et j'ai fait quelque chose, pouvez-vous me dire si c'est correct svp ?

    Donc en fait, ce qu'on veut vérifier dans une url, c'est que ca commence bien par http:// donc on a ^http://
    Ensuite, on peut avoir n'importe quels caracteres (lettres,chiffres) donc on a [a-zA-Z]
    Et pour finir, il faut qu'il soit du type .extension donc j'ai mis : [(.fr)|(.com)|(.net)|(.org)|(.biz)|(.info)|(.be)]$

    Ce qui donne au final :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ^http://[a-zA-Z][(.fr)|(.com)|(.net)|(.org)|(.biz)|(.info)|(.be)]$
    Qu'est-ce que je pourrais changer pour l'améliorer ?

    Merci
    ++
    c bon mais ca ne permet ni les sous domaines ni le https ni le tiret (-) qui est un caractère autorizé

  14. #14
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    Pour le https et les tirets (j'ajoute les chiffres au passage) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ^(http)|(https)://[a-zA-Z0-9-][(.fr)|(.com)|(.net)|(.org)|(.biz)|(.info)|(.be)]$
    AMHA, c'est une perte de temps de vérifier des URLs classiques. Pour une adresse e-mail, j'aurais compris mais pour une URL HTTP...
    Il y a plusieurs problèmes inhérents à cette méthode de vérifier les URLs au moment de l'envoi par l'utilisateur :
    • il est possible qu'il envoie une URL valide mais qui ne correspond pas à ton masque
    • il est possible que le serveur hébergeant l'URL ne réponde pas, précisément au moment où tu fais ton test
    • etc.

  15. #15
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Points : 144
    Points
    144
    Par défaut
    Chez moi, en local, ca ne marche pas mais sur le net oui.
    Ca renvoie le message en fait, 200 l'adresse est bonne, sinon elle n'existe pas c'est ca ?

    C'est mieux d'utiliser ca ou plutot la fonction checkdnsrr ??

    Merci
    ++

    Citation Envoyé par marcha
    essaie qqch comme ça si tu as CURL installé.

    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
     
    	function checkUrl($url) {
    		$c = curl_init($url);
    		curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
    		curl_setopt($c, CURLOPT_NOBODY, 1);
    		curl_setopt($c, CURLOPT_FOLLOWLOCATION, 1);
    		curl_setopt($c, CURLOPT_MAXREDIRS, 3);
    		curl_setopt($c, CURLOPT_CONNECTTIMEOUT, 10);
    		curl_setopt($c, CURLOPT_TIMEOUT, 10);
    		curl_setopt($c, CURLOPT_HEADER, 1);
    		curl_setopt($c, CURLOPT_USERAGENT, 'PHP');
    		$page = curl_exec($c);
    		$info = curl_getinfo($c);
    		curl_close($c);
    		return array($page, $info);
    	}
     
    list($page, $info) = checkUrl('tonurl');
    echo $info['http_code'];

  16. #16
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    Bon, si tu veux ajouter les sous-domaines, utilise cette expression :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ^(http)|(https)://[a-zA-Z0-9.-][(.fr)|(.com)|(.net)|(.org)|(.biz)|(.info)|(.be)]$
    Je persiste dans mon idée comme quoi c'est une mauvaise idée de valider les URLs avant de les enregistrer : quel mal y aurait-il à avoir une URL foireuse ?

  17. #17
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Points : 144
    Points
    144
    Par défaut
    oki merci bien pour votre aide..
    Je vais utiliser la fonction checkUrl de marcha, c'est pas mal du tout et au moins il n'y a pa de problemes d'extensions ou sous domaines, ca marche avec tout et ca renvoie le code http, il suffit juste de le traiter après


    Merci
    ++

  18. #18
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    Je compte sur toi pour publier tes améliorations :-)

  19. #19
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Points : 144
    Points
    144
    Par défaut
    oui j'aimerais bien, il y a pas de problemes mais ou exactement publié ca ?

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

Discussions similaires

  1. Comment vérifier qu'une date est nulle
    Par stressy dans le forum Access
    Réponses: 7
    Dernier message: 09/12/2005, 15h41
  2. Comment savoir si une URL existe
    Par funzynator dans le forum VB 6 et antérieur
    Réponses: 14
    Dernier message: 07/11/2005, 20h56
  3. [URL] Comment savoir si une URL existe?
    Par jse dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 07/10/2004, 15h33
  4. comment vérifier qu'une table esclave vérifie une condition?
    Par loikiloik dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/04/2004, 16h48

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