Dennis: subdomains via php anlegen

Beitrag lesen

Hi cr,

ja er nutzt confixx. was heißt umfangreich? kannst du mir kurz die schritte erläutern, die nötig wären?

Nun ja, dein PHP-Script müsste:

  • erst mal die Login-Seite aufrufen und sich dabei ein Session-Cookie setzen lassen
  • sich einloggen, indem es die Login-Daten sendet
  • die Seite aufrufen, auf welcher man Subdomains anlegen kann
  • ein Abschicken des dortigen Formulars simulieren, mit der gewünschten Subdomain
  • eventuell noch Prüfen, ob das Anlegen erfolgreich war
  • eventuell noch Ausloggen

Das zu programmieren ist nicht gerade wenig Arbeit, aber es ist auch keinesfalls unmöglich, vorausgesetzt, du hast bereits Erfahrungen in PHP und kennst dich auch etwas mit HTTP aus (mit HTML natürlich sowieso).

Wie gehst du dazu am besten vor? Nun, ich würde dir empfehlen, Firefox mit der LiveHTTPHeaders-Extension zu installieren, dort kannst du mal den kompletten Traffic mitprotokollieren, wenn du von Hand eine Subdomain anlegst. Und alles was du dort mitgeloggt hast, musst du im Prinzip mit PHP nachbauen, also alles was Firefox mit dem Server „gesprochen” hat, genauso musst auch du mit dem Server kommunizieren.

Soweit die Theorie… Jetzt musst du ja aber nicht zwangsläufig das Rad neu erfinden, wenn das doch schon Hunderte von Leuten vor dir getan haben. Nicht, dass jetzt unbedingt schon mal jemand in Confixx eine Subdomain anlegen wollte, aber HTTP-Requests mit PHP abzusetzen, das haben wirklich schon genug Leute gemacht (ich übrigens auch *g*) und deshalb wirst du dafür auch ein paar fertige Klassen finden. Spontan würde ich dir vom Zend Framework die Komponente Zend_Http und davon insbesondere die Klasse Zend_Http_Client ans Herz legen wollen.

So könnte das ungefähr aussehen:

// unter welcher Adresse ist Confixx zu erreichen?  
$confixxURL  = 'http://example.org';  
$confixxUser = 'webXX';  
$confixxPass = 'dein-passwort';  
  
// neuen Zend_Http_Client erstellen  
require_once('Zend/Http/Client.php');  
$client = new Zend_Http_Client();  
  
// Einstellungen für den HTTP-Clienten vornehmen  
$client->setConfig(array(  
  # Timeout für Verbindungsaufbau sind 20 Sekunden  
  'timeout' => 20,  
  # User-Agent kannst du setzen wie du willst ;-)  
  'useragent' => 'PHP ' . PHP_VERSION . ' with Zend Framework',  
  # Verbindung soll offengehalten werden, da wir mehrere  
  # Requests absetzen wollen (bessere Performance)  
  'keepalive' => true  
));  
  
// CookieJar aktivieren, damit regelt Zend_Http_Client das  
// Senden und Empfangen von Cookies vollautomatisch  
$client->setCookieJar();  
  
// zuerst rufen wir mal die normale Login-Seite auf, dabei  
// kriegen wir ein Session-Cookie  
$client->setUri($confixxURL . '/user/index.php');  # URL setzen  
$client->request(Zend_Http_Client::GET);  # GET-Request durchführen  
  
// nun müssen wir Benutzername und Passwort an den Server  
// senden, betrachtet man den HTML Quelltext von Confixx stellt  
// man schnell fest, wie die nötigen Formularfelder heißen  
$client->setUri($confixxURL . '/login.php');  
$client->setParameterPost('username', $confixxUser);  
$client->setParameterPost('password', $confixxPass);  
$response = $client->request(Zend_Http_Client::POST);  
  
// schauen wir uns mal die Response an, ob wir eingeloggt sind  
if(strstr($response->getBody(), 'Bitte Einloggen') !== false) {  
  // ich prüfe die HTML-Seite auf den String "Bitte einloggen", welcher  
  // in der Loginmaske von Confixx vorkommt, jedoch nicht auf der Seite,  
  // nachdem man eingeloggt ist.  
  die('Login fehlgeschlagen!');  
}  
  
// nun rufen wir die Domains-Seite auf, die URL davon rauszukriegen mag  
// etwas trickig sein *g*  
// Tip: Rechtsklick -> Aktueller Frame -> Frame-Informationen anzeigen  
$client->setUri($confixxURL . '/user/' . $confixxUser . '/tools_domains.php');  
$client->request(Zend_Http_Client::GET);  
  
// Jetzt musst du eigentlich nur noch das Formular für die Subdomain  
// ausfüllen ;-)  
$client->setUri($confixxUrl . '/user/' . $confixxUser . '/tools_domains_neu.php');  
$client->setParameterPost('prefix', 'foobar');  # für foobar.example.org  
$client->setParameterPost('domain', 'example.org');  
$client->setParameterPost('pfad', '/pfad/fuer/document/root');  
$client->setParameterPost('cur_page', 'tools_domains.php');  
$client->setParameterPost('action', 'new');  
$client->setParameterPost('bname_ok', '');  
$client->request(Zend_Http_Client::POST);  
  
// und jetzt am besten noch prüfen, ob das mit der Subdomain auch  
// geklappt hat, bei Bedarf im Anschluss hieran direkt noch weitere  
// Subdomains anlegen

Kleine Warnung am Rande: Ich habe das jetzt nur nebenbei runtergeschrieben, du solltest das also als einen Entwurf sehen, keine Garantie dafür, dass es auf Anhieb funktioniert ;-)

Ich habe das jetzt unter Betrachtung eines Servers mit Confixx Professional entwickelt, möglicherweise ist es anders, wenn du eine andere Version von Confixx hast.

Zum Analysieren der HTML-Formulare, die du Umsetzen musst, möchte ich dir noch Web Developer empfehlen, dort die Funktion Forms -> Display Form Details. Sehr praktisch ;-)

Viele Grüße,
  ~ Dennis.