2016-08-19 5 views
0

Quand je fais cela:Exécuter gethostbyname pour un maximum 1 seconde

print gethostbyname("google.ro"); 

Il imprime IP en moins de 1 seconde.

Si j'essaie de faire la même chose avec un domaine unexisting:

print gethostbyname("cduri.ro"); 

Il cherche à obtenir le IP comme 7-8 secondes et après qu'il échoue et imprime le domaine à la place. Ce que je veux réaliser est de casser le gethostbyname après 1 seconde, parce que je sais que cela signifie que le domaine n'existe pas. J'ai une grande liste de domaines, donc je ne peux pas attendre 7-8 secondes pour chaque domaine qui ne peut être atteint. Je veux arrêter et passer au suivant.

Y a-t-il un moyen d'y parvenir?

Répondre

0

Je regardai dans le manuel: http://www.php.net/manual/en/function.gethostbyname.php et trouvé ceci:

options pour les fonctions de résolveur sous-jacentes peuvent être fournis en utilisant la variable d'environnement RES_OPTIONS. (Au moins sous Linux, voir l'homme resolv.conf) Définir le délai et à 1 pour retries avoir un temps d'exécution maximum de 1 seconde pour la recherche DNS:

putenv('RES_OPTIONS=retrans:1 retry:1 timeout:1 attempts:1'); 
gethostbyname($something); 

Vous avez pas vu? Ou vous n'utilisez pas Linux? Ça ne marche pas pour toi? Il y a plus de suggestions dans le manuel, je ne vais pas tous les énumérer.

+0

Actuellement je teste dans mon wamp (windows) mais quand j'irai en direct j'aurai probablement un serveur linux. – paulalexandru

+0

Vous avez tagué votre question avec Linux, j'ai donc donné une réponse Linux. Il est évident que vous avez besoin d'une solution différente pour Windows. PHP utilise essentiellement des routines sous-jacentes disponibles dans le système d'exploitation, vous devez donc contrôler le délai d'attente de cette opération. Si vous le faites pour vérifier les adresses e-mail, il existe d'autres moyens de le faire. –

+0

Oui, mais avec PHP, nous pouvons détecter si nous fonctionnons sur un serveur Linux ou Windows, ce qui signifie que nous pouvons implémenter 2 solutions liées afin de travailler sur n'importe quel serveur. – paulalexandru