Mit PHP auf die eigene .tel-Domain zugreifen - Teil 1
Wie versprochen möchte ich nun mit einer Artikelserie über die Programmierung einer .tel-Domain starten. Für diese Serie werde ich die Möglichkeiten beschreiben, wie man seine eigene .tel-Domain mittels PHP verwalten kann. Neben der Darstellung und Erläuterung des eigentlichen Programmcodes werde ich auch versuchen ein wenig die Theorie zu beschreiben. Diese Infos kann man dann evtl. zur Programmierung in anderen Umgebungen nutzen.
Weiterhin werde ich in jeder Artikelserie versuchen, ein praktisches Beispiel zu liefern bzw. immer ein fertiges kleines Programm oder eine neue Funktionalität. Damit kann man dann zwischen den Artikeln der Serie ein wenig herumspielen und testen. Ich hoffe, dass die Abstände zwischen den einzelnen Artikelteilen nicht zu groß werden. Aber im Moment bin ich auch noch dabei, mich in die ganze Materie einzuarbeiten. Da ich auch nicht der PHP Profi bin, könnt ihr mir auch gerne Hinweise geben, wenn meine Beispielcodes nicht der üblichen Programmierung in PHP entsprechen.
So, nun wollen wir mit unserem ersten Beispiel starten. In diesem Teil werde ich erst einmal auf die Voraussetzungen für die Programmierung mit PHP eingehen. Dann werde ich Ansatzweise versuchen die Datenstruktur einer .tel-Domain zu erläutern. Schließlich werde ich dann einen ersten Code Schnipsel bereitstellen, der die Abfrage von Daten einer .tel-Domain ermöglicht.
Voraussetzungen für die Programmierung mit PHP
Zunächst benötigt man natürlich einen Hosting Service, der einem eine PHP Umgebung zu Verfügung stellt. Dies dürfte mittlerweile bei allen Angeboten, bei denen man eine Internetseite hosten kann, gegeben sein. Zusätzlich muss das SOAP Modul installiert sein. Dies ist leider nicht immer der Standard. So habe ich einen Hoster, bei dem dies scheinbar nicht der Fall ist. Glücklicherweise habe ich auch noch einen anderen Hoster bei dem es funktioniert.
Nun benötigt man noch zwei Dateien. Einmal ist dies die Datei Tel_Hosting.php, die man über die Telnic Seiten erhalten kann. Hierin sind die Funktionen für den Zugriff auf die .tel-Domain enthalten. Diese nutzen die entsprechenden SOAP Schnittstellen.
Als letzte Datei benötigen wir noch die Datei “client.wsdl“. In der Datei Tel_Hosting.php ist grundsätzlich beschrieben, wie man an diese Datei kommt. Der Weg führt quasi immer über den Webinterface-Aufruf der eigenen .tel-Domain und geht meist folgendermaßen:
- An den Link für das Webinterface wird die Endung “client?wsdl” angehangen
Bsp: http://telhosting.beispielink.com/client?wsdl - Im Browser erscheint dann in der Regel eine xml-Datei die man abspeichern und als client.wsdl umbenennen muss
- In der gespeicherten client.wsdl muss folgender Text “http://www.w3.org/2003/05/soap/bindings/HTTP/” durch “http://schemas.xmlsoap.org/soap/http” ersetzt werden.
Das war es. Nun müssen alle Dateien auf den Webserver. Bei mir habe ich zu Testzwecken das Verzeichnis “testtel” angelegt. Hier habe ich die Datei “Tel_Hosting.php” und “client.wsdl” abgelegt und natürlich meine unten beschriebene Beispiel Datei. Sollte das übrigens nicht klappen mit der “client.wsdl” Datei, so hilft wahrscheinlich nur eine Anfrage bei seinem Registrar, wie man an die Datei kommt.
Ein wenig Theorie zur Datenstruktur einer .tel-Domain
Damit ich gleich noch auf den eigentlichen Programmcode eingehen kann, möchte ich heute nur ganz kurz die Datenstruktur einer .tel-Domain erläutern. Die Daten einer .tel-Domain werden direkt im DNS (Domain Name System) abgelegt. Für den Inhalt einer (Sub-)Domain gibt es hierbei ein paar Regeln:
- Normalerweise gibt es einen sogenannten A record, CNAME und DNAME records. Diese Datensätze werden bei der Registrierung gefüllt. Ein Domain-Besitzer oder TelHosting Provider kann hier keine Änderungen vornehmen.
- Die Domain kann Werte vom Typ NAPTR, TXT und LOC enthalten. Im Typ TXT werden z.B. u.a. die Header Infos verwaltet. Der Typ LOC dient zur Ablage der Standortinfos. Der Typ NAPTR ist eigentlich das Kernstück der .tel-Domain Datenstrutur. Hier werden sämtliche Kontaktinfos verwaltet.
- Es muß mindestens ein NAPTR Datensatz vorhanden sein
- Es darf nur ein LOC Datensatz vorhanden sein
- Es können 1 oder mehrere TXT Datensätze zur Darstellung von Schlüsselworten vorhanden sein
Zu weiteren Beschreibungen gelangt man auch über den Developer Bereich bei Telnic. In den nächsten Artikeln werde ich insbesondere noch auf die NAPTR Datenstruktur eingehen.
Das erste PHP-Programm zur Abfrage einer .tel-Domain
Kommen wir nun zu unserem ersten PHP Programm. Mit diesem Programm nutzen wir aus der Datei Tel_Hosting.php die Funktion list_records. Mit dieser Funktion werden die Daten einer Domain abgerufen, so dass man oben definierte Datenstruktur erhält. In dem Programmbeispiel habe ich mich darauf beschränkt die drei Typen “TXT”, “NAPTR” und “LOC” ohne weitere Formatierung auszugeben. Hierzu nutze ich die PHP-Funktion print_r die mir die Struktur einer Variablen und dessen Inhalte darstellt. Im nächsten Artikel werde ich dann insbesondere auf die NAPTR Struktur eingehen und entsprechende Funktionen zur Ermittlung der einzelnen Werte aufzeigen.
<?php include('Telhosting_Client.php'); header('Content-Type: text/html; charset=utf-8'); class myTel_Domain { var $mydomain; // Name der tel-Domain var $myclient; // soap client function __construct($login, $password, $domain, $wsdl) { // config variable für Telhosting_Client initialisieren $config = array(); $config['login'] = $login; $config['password'] = $password; $config['wsdl'] = $wsdl; // eigene domain merken $this->mydomain = $domain; // client initialisieren $this->myclient = new Telhosting_client($config); } function print_records() { $records = $this->myclient->list_records($this->mydomain); // Ausgabe des TXT Datensatz print_r($records->txt); echo "<br/><br/>"; // Ausgabe des NAPTR Datensatz print_r($records->naptr); echo "<br/><br/>"; // Ausgabe des LOC Datensatz print_r($records->loc); } } $mytel = new myTel_Domain('mein_user_name', 'mein_password', 'mein-domainname.tel', 'client.wsdl'); $mytel->print_records(); ?>
Nun zur Erläuterung der php-Datei. In der Klassendefinition von “myTel_Domain” habe ich alle notwendigen Variablen und Funktionen deklariert. Beim Erstellen einer entsprechenden Objekt-Variablen (siehe vorletzte Zeile) muss der Benutzername und das Passwort angegeben werden, die man sonst zur Anmeldung über das Webinterface benutzt. Als nächster Parameter folgt der Domainname und schließlich die Angabe des Namen für die Datei “client.wsdl”.
Diese habe ich auch als Variable definiert, da man somit die Möglichkeit hat, unterschiedliche Dateien anzugeben. So kann man Domains von unterschiedlichen Registraren ansprechen. Ich habe mir zum Beispiel eine “client1.wsdl” und “client2.wsdl” für meine beiden Registrare definiert.
Beim Erzeugen eines Objekts der Klasse “myTel_Domain” wird der Konstruktur aufgerufen und die Verbindung zur .tel-Domain über die Erzeugung eines TelHosting Client Objekts hergestellt. Hierzu müssen unsere oben definierten Parameter im Array “config” bereitgestellt werden. Den übergebenen Domainnamen merke ich mir nur in der Klasse für spätere Verwendungszwecke.
Mit dem neu erzeugten “myTEl_Domain”-Objekt rufe ich nun die Funktion “print_records” auf. Diese Funktion gibt die Daten des Domain-Records getrennt nach den Typen “TXT”, “NAPTR” und “LOC” aus.
So, dass war bereits der erste Teil der neuen Artikelserie. Viel Spaß beim Testen. Für Kommentare, Hinweise und Fragen bin ich immer sehr dankbar. Die Beispieldatei könnt ihr natürlich auch direkt herunterladen
PHP-Tel-Domain Beispieldatei (219)








Hallo Jürgen
Ich habe mich auf dein erstes Beispiel gefreut. Leider bin ich jetzt über eine Stunde dran und es klappt nichts. Ich erhalte immer als erstes die Meldung:
1 #!/opt/local/bin/php -q 2
Die weiteren Meldungen sind dann bereits gesendeter Header usw., was also erstmal nichts mit dem Problem zu tun hat.
Mein Hoster hat soap enabled, die client.wsdl habe ich von meinem tel-Regsitrar, in deinem Beispiel habe ich “new myTel_Domain” angepasst… Einzig die von dir genannte Änderung von “http://www.w3.org/2003/05/soap/bindings/HTTP/” kann ich nicht vornehmen, weil der Text gar nicht vorhanden ist.
Du hast nicht zufällig einen Tipp, wo ich ansetzen könnte, um den Fehler zu beheben?
Gruss
Role
Nochmal Hallo
Nicht, dass es jetzt gehen würde, aber zwei Dinge sind anzumerken:
1)
“1 #!/opt/local/bin/php -q 2″ stammt aus dem Beginn der “Telhosting_Client.php”, die ich mir bei telnic runtergelandeh hatte, und das musste gelöscht werden.
2)
Ich habe das Beispiel unter “http://www.tel-domain-forum.de/ger_details_506/Moechtest_du_die_Daten_deiner_Tel_Seite_auch_auf_deiner_Webseite_haben.html” ausprobiert und dabei gemerkt, dass es mit der einen tel-Domain nicht funktioniert, mit der anderen jedoch schon! Ein Fehler kann also bei der Domain selbst liegen!?
Die Fehler, die ich mit meiner anderen Domain nun bei deinem Beispiel erhalte, sind in der Art:
“stdClass Object ( [id] => 1489615 [owner] => @ [class] => 1 [profiles] => 193722 [groups] => …” usw.usw. Es scheint also eine Art Array-Dump ausgegeben zu werden statt der erwarteten Daten.
Für heute höre ich nun wirklich auf.
Gruss
Role
zu 1) Die Zeile muss scheinbar tatsächlich aus der Tel_Hosting Datei gelöscht werden. Ich teste schon eine Weile damit herum und habe diese Zeile wahrscheinlich auch entfernt. Bei mir ist sie jedenfalls nicht drin.
zu2) Das mit dem “dump” ist im Prinzip korrekt so. Das ist genau die print_r Ausgabe. Mehr kommt in meinem Beispiel aktuell nicht heraus. Als nächstes muss man jetzt die Strukturen (insbesondere den NAPSTR record) auseinander pflücken. Dies werde ich dann im nächsten Artikelteil machen.
Ich nehme an, dass dein obiges Beispiel aus der ersten Zeile der Ausgabe kommt. Hier wird ein Array von allen Profilen, die man definiert hat ausgegeben. So wie es aussieht hast du aber aktuell nur ein Profil. Wenn du jetzt in meiner Beispieldatei statt “print_r($records->txt);” folgendes schreibst “echo ($records->txt->text);”, dann müsste er in der ersten Zeile den Headertext ausgeben.
Soweit schon mal für dich vorab. Ich versuche, den nächsten Artikel bald zu schreiben.