Blog, PHP / MySQL

DomainCheck mit PHP

WordPress Entwickler und Webdesigner

In diesem Artikel möchte ich euch ein Script vorstellen, dass ich für ein aktuelles Projekt programmiert habe. Es handelt sich dabei um einen DomainCheck mit dem überprüft werden kann, ob eine Domain bereits registriert ist oder noch registriert werden kann.

Das Prinzip dahinter ist relativ einfach: Wir haben eine Liste mit Whois Abfrage Servern und entsprechende Rückgabewerte, wenn die Domain frei ist. Mithilfe dieser Liste werden dann die Domains auf den entsprechenden Verfügbarkeitsstatus überprüft.

Ihr könnt das Script im Rahmen der GNU General Public License vollumfänglich weiter nutzen. Vielleicht hat der Eine oder Andere von euch einen Verwendungszweck für das Script. Viel Spaß damit.

Anzeige:




<?php
/*
 *
 * Author: Pascal Bajorat
 * Copyright (c) 2010 Pascal Bajorat
 * www.webdesign-podcast.de
 *
 * GNU General Public License lizenziert
 * http://www.gnu.org/licenses/gpl.html
 * http://creativecommons.org/licenses/GPL/2.0/deed.de
 *
 * DomainCheck Script
 * Version 1.0.0
 *
 * DomainCheck Script. Zum testen ob Domains bereits vergeben sind oder noch registriert werden können.
 *
 */
 
/* Array mit DomainTopLevel => Whois Url || Rückgabewert wenn die Domain frei ist */
$nic = array(
	'de' => 'whois.nic.de||free',
	'at' => 'whois.nic.at||nothing found',
	'com' => 'whois.crsnic.net||no match for'
);
// Fehlermeldung, wenn die Eingabe der Domain fehlerhaft ist
$WrongDomain = 'Die eingegebene Domain ist fehlerhaft. Bitte &uuml;berpr&uuml;fen Sie Ihre Schreibweise: domain.tld';
// Fehlermledung wenn diese TopLevel Domain nicht überprüft werden soll
$DontSellDomain = 'Bitte entschuldigen Sie, aber wir vertreiben diese TopLevelDomain nicht. Bitte entscheiden Sie sich für eine: .de, .at oder .com Domain.';
// Fehlermeldung wenn der Server der NIC Vergabestelle nicht erreichbar ist
$ServerNotReachable = 'Der Server der Vergabestelle ist aktuell nicht erreichbar, bitte versuchen Sie es später noch einmal.';
/*
 * $_REQUEST['domain'] ist die Variable über die die Domain die überprüft werden soll übergeben wird
 * strtolower() wandelt den kompletten String in Kleinbuchstaben um
 * trim() entfernt Leerzeichen am Anfang und Ende des Strings
 * strip_tags() entfernt HTML Tags
 *
 * Der geänderte und bearbeitete String wird in der Variable $domain gesichert
 *
 */
$domain 	= strip_tags(trim(strtolower($_REQUEST['domain'])));
 
// Überprüfen das die Variable $domain nicht leer ist ansonsten wird eine Fehlermeldung ausgegeben
if( !empty($domain) ){
	// Aus der $domain Variable werden die ggf. vom Nutzer mit eingegebenen http:// und www. Teile entfernt
	$domain = str_replace('http://', '', $domain);
	$domain = str_replace('www.', '', $domain);
 
	// Die Domain wird anhand des Punktes in zwei Teile geteilt DomainName.TopLevel
	$domain = explode('.', $domain);
	$domainCount = count($domain);
 
	// Danach wird überprüft ob die Domain auch wirklich nur aus zwei Teilen besteht,
	// damit z.B. keine Subdomains eingegeben werden Sub.DomainName.TopLevel
	if($domainCount > 2){ die($WrongDomain); }
 
	// Überprüfung ob die eingegebene TLD in unserem Array ($nic) enthalten ist und überprüft werden kann
	if( empty($nic[$domain[1]]) ){ die($DontSellDomain); }else{
		// Wenn der Array Teil für die entsprechende TLD vorhanden ist wird dieser anhand des || gesplittet
		$myNic = explode('||', $nic[$domain[1]]);
		// $NicServer enthält die Server URL
		$NicServer = $myNic[0];
		// $NicFreeResponse enthält den Rückgabewert wenn die Domain frei ist
		$NicFreeResponse = $myNic[1];
	}
 
	// Checken ob der entsprechende whois Server erreichbar ist und dann Verbindung aufbauen
	if ( !($fp = fsockopen($NicServer, 43)) ) {
		// Wenn nicht wird diese Fehlermeldung ausgegeben
		die($ServerNotReachable);
	}
 
	// Dem Server den zu überprüfenden Domainnamen übergeben
	fwrite($fp, $domain[0].'.'.$domain[1]."\r\n");
	$result = '';
 
	// Antwort vom whois Server holen
	while (!feof($fp)) {
		$result .= fread($fp, 1024);
	}
 
	// Verbindung zum Server wieder trennen
	fclose($fp);
 
	// Die Antwort des whois Servers mit dem Rückgabewert aus dem Array vergleichen
	if( strstr($result, $NicFreeResponse) ){
		// Ist der Vergleich erfolgreich, so wird die Nachricht zurückgegeben
		echo 'Die Domain '.$domain[0].'.'.$domain[1].' ist noch nicht vergeben. Wir k&ouml;nnen die Domain f&uuml;r Sie registrieren.';
	}else{
		// Ist die Domain bereits vergeben, erscheint diese Fehlermeldung
		echo 'Es tut uns leid, die Domain '.$domain[0].'.'.$domain[1].' ist leider vergeben. Vielleicht m&ouml;chten Sie eine andere Domain-Kombination ausprobieren?';
	}
}else{
	// Fehlermeldung wenn der Inhalt der Variable $domain leer ist
	echo $WrongDomain;
}
?>

Bitte beachten falls es Probleme gibt: https://www.webdesign-podcast.de/2010/09/03/domaincheck-mit-php/comment-page-1/#comment-170

Schlagworte zu diesem Artikel: , , , ,

Veröffentlicht von Pascal Bajorat

Pascal Bajorat ist Mediengestalter und arbeitet als Webdesigner / Webentwickler, Autor und Trainer in Berlin. In den vergangenen Jahren hat er sich vor allem auf das CMS WordPress und die Entwicklung von hochwertigen Webseiten und Sonderlösungen spezialisiert. Er hat den Webdesign-Podcast.de 2010 gegründet.

Webseite:

20 Antworten zu “DomainCheck mit PHP”

  1. Dankeschön!
    „de“ klappt prima!
    „com“ gibt mir leider immer eine bereits belegte Domain zurück.
    „net“ habe ich auch erfolglos mit „’net’=>’whois.internic.net||no match for‘,“ anzufügen…
    Hat jemand einen Tipp? 🙂

  2. Hi, Leser
    ich verwende genau das Script in der Version auf einer Webseite und es funktioniert ohne Probleme.

    Wenn du uns villeicht die URL schickst auf welcher Webseite du das ganze versuchst. Dann kann ich mir die Fehlerausgabe mal ansehen.

    Grüße
    Pascal

  3. Danke Pascal, aber wie schon gesagt gab es keine Fehlermeldung.

    Ich habe noch etwas getestet.
    Der Rückgabewert vom Server was „…No match for..“ – nicht „..no match for..“.

    Mit der geänderten Zeile:
    if( stristr($result, $NicFreeResponse) ){
    funktioniert jetzt auch alles.

  4. Hallo!
    Super, genau sowas suche ich. Wie muss das HTML-Formular ausschauen, damit es funktioniert? Sorry aber bin da noch etwas unbedarft. Gibt es das Script vielleicht irgendwo im Einsatz wo ich mal schauen kann?
    Freue mich auf eine Rückmeldung.
    Viele Grüße, Marc

    • Hallo nochmal…soweit so gut, die Abfrage läuft. 🙂

      Aber jetzt muss ich doch noch eine dumme Frage stellen, da ich mich mit php nicht die Bohne auskenne: wie kann ich nun die Meldungen des Scripts auf der Abfrageseite integrieren? Derzeit schreibt er das Ganze oberhalb der eigentlichen Seite, was natürlich nicht gerade schick ausschaut.

      Freue mich auf deine Antwort.

      Viele Grüße und Danke vorab
      Marc

  5. Könnte nützlich sein bzw. manuelle Arbeit ersparen. Ist ja schon bisschen älter, mal sehen ob das mit php 5.3 klappt.
    @Marc naja die ausgabe erfolgt da wo „echo“ steht. Maqn könnte ne art theming funktion schreiben die das hübscher gestaltet.

  6. Hallo Pascal,
    bei mir funktioniert da was nicht, ich erhalte die Meldung
    „Die eingegebene Domain ist fehlerhaft. Bitte überprüfen Sie Ihre Schreibweise: domain.tld“

    Ich habe versuchsweise ein Formular erstellt: http://www.rhdw.de/domaincheck.html und das Script in die Seite check.php eingebaut, die check.php im selben Verzeichnis hinterlegt und in der html-Datei die Zeile
    eingefügt.
    Offensichtlich wird das php-Script einwandfrei erkannt und ausgelesen.

    Was kann da noch fehlerhaft sein?
    Gruß
    R.H.

  7. Hallo Pascal,

    ist dir zufällig bekannt, wie der korrekte (!) Rückgabewert bei .eu Domains lautet?

    Leider bekomme ich für .eu-Domains keine korrekte Abfrage hin. Führe ich eine Whoisabfrage über whois.eu aus, erhalte ich als Ausgabe „Domain: DOMAINNAME Status: AVAILABLE“ – AVAILABLE funktioniert jedoch nicht.

  8. Hallo Pascal,

    ich habe ein Problem mit dem Script, hoffe das Du mir helfen kannst.
    Ich habe das „$nic = array(“ von drei auf 5 (de, org, com, net und info) erweitert.
    Weiterhin wollte ich hier „$domain = strip_tags(trim(strtolower($_POST[‚domain‘]))); “ die Anfrage per POST senden, was auch geht.

    Mein HTML-Formular hat diesen Code.
    <form action="“ method=“POST“
    enctype=“multipart/form-data“ accept-charset=““>
    Wunschdomain noch frei?
    www.

    Auf folgende Endungen kann geprüft werden: .de, .com, .net, .org, .info

    Jetzt wollte ich das, wenn eine Domain noch frei ist oder nicht das die Ausgabe per echo wo anders steht. Da es einfach auf meiner Seite besser aussieht. Außerdem wollte ich das die Domain „$domain“ oder „domain“ per SESSION an ein Formular übergeben wird. Der Ausgabetext das die Domain noch frei ist oder nicht soll aber nur angezeigt werden, wenn die SESSION aufgerufen wird. Nur leider ist es im Moment so, dass er angezeigt wird, wenn ich das erste mal nach einer Domain gesucht habe.

    Ich habe deswegen mal das „“ eingegeben und bekam folgende Meldung. (Original Script): “ Notice: Undefined index: domain in xxx.php on line 40
    Die eingegebene Domain ist fehlerhaft. Bitte überprüfen Sie Ihre Schreibweise: domain.tld“

    Zeile 40: $domain = strip_tags(trim(strtolower($_POST[‚domain‘])));

    Es wäre schön, wenn Du mir da helfen könntest.

    Liebe Grüße
    Andre

    • Wenn du im Script über

      $domain = strip_tags(trim(strtolower($_REQUEST[‚domain‘])));

      das hier setzt

      $_REQUEST[‚domain‘] = ‚testdomain.de‘;

      dann kannst du doch die Domain abfragen.

      Nun musst du nur noch statt testdomain.de eine Variable einsetzen die du mit POST eintragen kannst.

  9. Der angezeigte Text war leider nicht ganz vollständig…

    Ich habe deswegen mal das “ error_reporting(E_ALL); “ eingegeben. und bekam folgende

  10. Wie habt ihr das mit den Whois Abfragen für weitere TLD gemacht?

    Ich habe die ‚ch‘ => ‚whois.nic.ch‘ eingetragen und erhalte leider immer die Meldung das die Domain verfügbar ist.

Kommentar verfassen

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

Der Benachrichtigungs-Dienst wird von WordPress.com (Automattic Inc., USA ) bereitgestellt. Mit der Anmeldung akzeptierst du die Datenschutzerklärung. Die Abmeldung / Abo-Verwaltung ist jederzeit über diesen Link möglich.