Witaj, Gościu O nas | Kontakt | Mapa
Wortal Forum PHPEdia.pl Planeta Kubek IRC Przetestuj się!

Weryfikacja adresu e-mail w PHP

Własna funkcja checkdnsrr()

Funkcja customCheckDnsrr() jest klasycznym przykładem rozwiązania do zaimplementowania oczekiwanej funkcjonalności checkdnsrr() na platformy windowsowskie. Jest to bardzo często stosowane w wielu skryptach. No to czas na kod:

function customCheckDnsrr($host,$recType='') {
 if(!empty($host)) {
  if($recType=='') $recType="MX";
  exec("nslookup -type=$recType $host",$output);
  foreach($output as $line) {
   if(preg_match("/^$host/", $line)) {
    return true;
   }
  }
  return false;
 }
 return false;
}

Nasza wersja funkcji checkdnsrr() działa na zasadzie tworzenia systemowego polecenia, dostępnego w systemach Windows znanego jako nslookup. Przypomina ono funkcjonalnością działanie checkdnsrr i jest bardzo przydatne do uzyskania tego samego wyniku. W naszym skrypcie używamy funkcji nslookup przez wywołanie funkcji PHP exec(), która jest jedną z metod na wywołanie polecenia systemowego z poziomu PHP. Wynik jest w postaci tabeli w parametrze $output.

Kiedy funkcja nslookup jest wywołana, wyszukuje ona odpowiedniego wejścia dla podanej domeny w DNSie. Jeśli powiedzie się to wyszukiwanie zostanie zwrócony wynik podobny do poniższego:

Server:  ns1.infoar.net
Address:   200.80.203.242
calop.com.ar   MX preference = 10, mail exchanger = mail.infoar.net

Aby określić, czy odpowiedni uchwyt maila dla tej domeny istnieje, funkcja w pętli przechodzi przez wszystkie linie zwrócone w wyniku szukając linii zaczynającej się od szukanego hosta. Jeśli linia zostanie znaleziona, wtedy funkcja zwróci true. Jeśli nie to oczywiście false.

Oto kod, w którym używamy funkcji customCheckDnsrr():

function checkEmail($email) {
 if(preg_match("/^( [a-zA-Z0-9] )+( [a-zA-Z0-9\._-] )*@( [a-zA-Z0-9_-] )+( \.[a-zA-Z0-9_-] +)+$/" , $email)){
  list($username,$domain)=split('@',$email);
  if(!customCheckDnsrr($domain)){
   return false;
  }
  return true;
 }
 return false;
}

Ten fragment kodu jest niemal identyczny do tego, którego używaliśmy z checkdnsrr(). Został tylko zmieniony w jednym miejscu, aby wykorzystywał przez nas zdefiniowaną wcześniej funkcję.

Informacje na podobny temat:
Wasze opinie
Wszystkie opinie użytkowników: (6)
Weryfikacja adresu e-mail w PHP
Czwartek 29 Marzec 2012 12:17:49 pm - pp-layouts <machine_at_nisza.org>

Wiedziałem, że w artykule będzie sposób 1 regexem. To zło, ten regex jest nieprawdopodobnie wolny, co wychodzi, jak chce się ten sam algorytm użyć do walidacji emaila po stronie klienta podczas wpisywania. Rozwiązanie jest banalnie proste - dzielimy e-mail po małpie na 2 części i walidujemy osobno domenę (prostsze reguły) i login (troszkę trudniejsze reguły). Ta metoda jest wystarczająco szybka nawet uruchamiana po każdym naciśnięciu klawisza w IE7.

Data Filtering Extension
Sobota 16 Styczeń 2010 10:15:55 pm - Meares <meares_at_mixbox.pl>

W PHP5.2 jest domyślnie aktywne rozszerzenie "Data Filtering", które pozwala na walidację wielu rzeczy, w tym adresu e-mail. Adres e-mail można sprawdzić w następujący sposób:
<?php
filter_var('admin@przyklad.pl', FILTER_VALIDATE_EMAIL);
?>

walidacja
Czwartek 16 Kwiecień 2009 1:09:39 am - x10d <djek_at_toya.net.pl>

@walidacja/rozny:
usun wszystkie spacje z wyrazenia preg_match, to zadziala:>

walidacja
Piątek 04 Styczeń 2008 4:33:12 pm - rozny <rozny_at_tlen.pl>

a mi to to nie dziala... jakiego meila bym nie wpisal wyswietla invalid email address... :(

validacja
Niedziela 20 Maj 2007 11:55:19 am - Prym

Oczywiście masz rację że najprościej jest wysłać maila z kodem aktywacyjnym. ale są sytuacje w których nie chodzi o zakładanie konta ale o np umowę - gość wprowadza dane łącznie ze swoim adresem mailowym który jest wymagany do kontaktu i to nawet nie dla mnie ten validator ale niech sie klient kropnie w swoim mailu - a juz kilka razy widzialem jak ludzie robia spacje nie tam gdzie trzeba a potem jest krzyk ze nie ma odzewu na zapytanie czy inną sprawę.

Dlatego napisze genialny artykuł :) zwłaszcza validacja domen mnie polozyła nie wiedzialem ze az tyle sposobów jest na to.

Komentarz ?
Poniedziałek 26 Luty 2007 8:58:02 am - puciek

A nie prosciej po prostu wyslac email na podany adres z kluczem aktywacyjnym ?
100% skuteczna metoda

Mentax.pl    NQ.pl- serwery z dodatkiem świętego spokoju...   
O nas | Kontakt | Mapa serwisu
Copyright (c) 2003-2024 php.pl    Wszystkie prawa zastrzeżone    Powered by eZ publish Content Management System eZ publish Content Management System