Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Jak sprawdzić istnienie domeny?
Forum PHP.pl > Forum > PHP
eai
Nie znam sie za bardzo na socketach i nie wiem jak nimi się poslugiwac.

Chcialem napisać sobie skrypt który sprawdzałby czy dana domena istnieje.

Ale nie wiem jak do tego sie zabrac i jakich funkcji bede potrzebowal. Nie chce gotowca, chce kilka wskazowek. Pozdrawiam
devnul
wykorzystaj serwery WHOIS
LBO
checkdnsrr" title="Zobacz w manualu php" target="_manual, ewentualnie (jeżeli posiadasz serwer na *nixie) poczytaj i użyj komendy host.

cheers
060156
Prosciej ...
mozesz uczyc cUrl lub
fopen(nazwa_domeny,"r");
jesli otwarles ten zbior to domena istnieje ..
devnul
@060156: co do tego sposobu to nie zawsze istninie domeny oznacza ze jest ona dostepna w sieci (podpieta pod jakiś serwer), więc jest to sposób zawodny, aczkolwiek da się sprawdzić nim bardzo prosto większość domen.
eai
whois.php
  1. <?php
  2.  
  3. Class Whois
  4. {
  5. var $whois_server;
  6. var $timeout = 30;
  7.  
  8. function lookup($domain)
  9. {
  10. $result = "";
  11. $parts = array();
  12. $host  = "";
  13.  
  14. // .tv don't allow access to their whois
  15. if (strstr($domain,".tv"))
  16. {
  17. $result = "'.tv' domain names require you to have an account to do whois searches.";
  18. // New domains fix (half work, half don't)
  19. } elseif (strstr($domain,".name") || strstr($domain,".pro") >0){
  20. $result = ".name,.pro require you to have an account to do whois searches.";
  21. } else{
  22. if (empty($this->whois_server))
  23. {
  24. $parts = explode(".",$domain);
  25. $testhost = $parts[sizeof($parts)-1];
  26. $whoisserver  = $testhost . ".whois-servers.net";
  27. $this->host  = gethostbyname($whoisserver);
  28. $this->host  = gethostbyaddr($this->host);
  29.  
  30. if ($this->host == $testhost)
  31. {
  32. $this->host = "whois.internic.net";
  33. }
  34. flush();
  35. }
  36. $whoisSocket = fsockopen($this->host,43, $errno, $errstr, $this->timeout);
  37.  
  38. if ($whoisSocket)
  39. {
  40. fputs($whoisSocket, $domain."\015\012");
  41. while (!feof($whoisSocket))
  42. {
  43. $result .= fgets($whoisSocket,128) . "<br>";
  44. }
  45. fclose($whoisSocket);
  46. }
  47. }
  48. return $result;
  49. }
  50. }
  51.  
  52. ?>



check.php
  1. <?php
  2.  
  3. include("whois.php");
  4.  
  5. $val = "example.com";
  6.  
  7. $who = new Whois;
  8.  
  9.  
  10. $adres = "www." . $val;
  11. $adres = str_replace(" ", "", $adres);
  12. $adres = str_replace("\r\n", "", $adres);
  13. $adres = str_replace("\r", "", $adres);
  14. $adres = str_replace("\n", "", $adres);
  15.  
  16. $IP = @gethostbyname($adres);
  17. $hostname = @gethostbyaddr($IP);
  18.  
  19. $Validiate = @checkdnsrr($hostname, "A");
  20.  
  21. if ($Validiate == FALSE) {
  22.  
  23. if (eregi("No information about domain", $who->lookup(str_replace("www.", "", $adres)))) {
  24. echo "Domena jest wolna";
  25. }
  26.  
  27.  else { $Validiate = TRUE; }
  28.  
  29. }
  30.  
  31. if ($Validiate == TRUE) { 
  32.  
  33. echo " Domena Zajęta";
  34.  
  35. }
  36.  
  37.  
  38.  
  39.  
  40. ?>



Aby odciążyć serwer najpierw sprawdzam checkdnsrr jeśli zwraca mi False wtedy łączę się z serwerem Whois... Działa. Tylko troche wolno :/ pozdrawiam.
LBO
Cytat
Aby odciążyć serwer najpierw sprawdzam checkdnsrr jeśli zwraca mi False wtedy łączę się z serwerem Whois...

Ja na twoim miejscu, wrzuciłbym to w jedną klasę (samotna ta klasa z jedną metodą tylko - to już lepsza sama funckja) - dzieki temu te dwa kroki można by używać niezależnie, a w 3 metodzie umieścił to co napisałeś w cytacie.
P.S. Uniknąłbyś powtórek w kodzie.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.