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 :

Vérifier une url, altenatives à fsockopen [FAQ]


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 10
    Points : 8
    Points
    8
    Par défaut Vérifier une url, altenatives à fsockopen
    Bonsoir,

    Je suis actuellement en train de ma casser la tête sur une fonction. Je cherche en gros à réaliser ceci. Cette fonction me convient parfaitement (à une exception près ), puisque je cherche à valider une URL entrée par les visiteurs (site perso).

    Pour faire un bref historique, voici le cheminement que j'ai fait:
    • Code : Sélectionner tout - Visualiser dans une fenêtre à part
      $url = checkdnsrr(eregi_replace("http://", "", $url), "MX");
      checkdnsrr() est très utile, le problème vient pour la vérification de site perso hébérgé gratuitement avec un domaine de forme membres.machin.fr/moncompte/. Si l'on parse le domain, on va valider le "membres.machin.fr", mais pas le "/moncompte/". Il est dommage d’exclure certain site sous prétexte du domaine .
    • Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      $url = fsockopen(eregi_replace("http://", "", $url), 80);
      $url = fopen($url, 'r');
      J'en suis ensuite revenu aux fonctions classiques, fopen et fsockopen, celle-ci remplissent bien la condition que je me suis fixée, mais sont très longues si l'URL entrée est incorrecte. J'entends par longue que le temps d'exécution est bien trop important pour un hébergement mutualisé. La fonction "attend" entre 4 et 9 seconde avant de renvoyer son erreur de permettre la fin de l'exécution du script.

    En claire je recherche
    • Soit un moyen de limiter ces fonctions dans le temps (pas le script entier, juste ces fonctions).
    • Soit une alternative à ces fonctions.


    Je suis étonné de ne pas avoir trouvé de poste(s) similaire(s), aussi si cette question a déjà été abordée, ne me tombez pas dessus je n'ai rien trouvé en recherchant

    Bonne soirée

  2. #2
    Membre actif
    Avatar de doof
    Inscrit en
    Août 2003
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 160
    Points : 294
    Points
    294
    Par défaut
    Salut, peut etre combiner les 2, si checkdnsrr est vrai, alors vefifier le sous domaine en envoyant une requete HEAD.

    Ce qui eviterait d'envoyer un fsockopen dans le vide.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Salut gendo,

    J'utilise pour ma part get_meta_tags() (j'aurais préféré get_headers() mais suis en PHP 4.3.8):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    @$meta = get_meta_tags($url);
    if ( is_array($meta) ) { print_r($meta);}
    else { echo "erreur";}
    Si l'url renvoit vers un site existant, $meta sera un tableau (vide ou non). Si elle n'existe pas, c'est une variable nulle.
    En rentrant une url erronée, le temps de réponse est de 1-2s, ce qui est tout de même plus rapide que le timeout apache (500s).

    Ceci ne m'a pas l'air conventionnel mais est beaucoup plus rapide pour le traitement de masse des url.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    doof, oui ton idée est vraiment pas mauvaise, merci

    Dr DLP, je vais tester cette fonction, ça pourrait en effet convenir Dommage pour le get_headers(), qui avait l'air encore mieux .

    Merci à vous deux, je retourne à mes test dès que suse accepte de booter.

    Bonne soirée

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Voilà, j'ai finalement couplé checkdnsrr() et get_meta_tags():
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	$details = parse_url($url);
    	if (!checkdnsrr($details['host'], "MX"))
    	{
    		return "Votre site est inexistant ou inaccessible";
    	}
    	else 
    	{
    		@$meta = get_meta_tags($url);
    		if ( is_array($meta) ) { return FALSE; }
    		else { return "Votre site est inexistant ou inaccessible"; }
    	}
    Résolu, merci à vous deux

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

Discussions similaires

  1. Vérifier une URL
    Par Khleo dans le forum Langage
    Réponses: 3
    Dernier message: 15/03/2012, 07h37
  2. Peut on vérifier une URL vers un fichier css
    Par Freud44 dans le forum ASP.NET
    Réponses: 9
    Dernier message: 17/08/2010, 16h34
  3. vérifier une URL
    Par Paul Van Walleghem dans le forum VB.NET
    Réponses: 8
    Dernier message: 06/04/2009, 15h04
  4. Comment vérifier une URL saisie dans mon formulaire ?
    Par cdevl32 dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 28/10/2007, 18h32
  5. [MySQL] Vérifier une URL dans la validation d'un formulaire
    Par groupejtt dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 30/11/2006, 11h48

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