PHP/Netzwerkzugriff mit Socketfunktionen

Aus Mikiwiki
< PHP
Wechseln zu: Navigation, Suche

Mit den Funktionen "fsockopen" und "pfsockopen" können Dateien behandelt werden - diese können bekanntlich auch auf einem Webrechner liegen. Bei der Programmierung von Anwendungen, die gezielt auf den Server zugreifen, sind jedoch eine ganze Reihe zusätzlicher Funktionen notwendig.

Zur Verbindung mit einem Webserver wird der Domainname oder die IP-Adresse und der Port angegeben, der einen Dienst auf dem betreffenden Rechner adressiert. Mit Hilfe des Handles "$fp" können weitere Operationen mit entsprechenden Funktionen ausgeführt werden.

$fp = fsockopen("hostname.tld", "80");

Die Abfrage eines Whois-Servers liefert vielfältige Informationen über eine Domain. Mit Hilfe des folgenden Skripts kann leicht ein solcher Abfragedienst angeboten werden.

<?php
function lookup($lookup, $server)
{
  $errno = $errstr = "";
  ## Erstellen des Handles für die Verbindung. 43 ist der Port für
  ## die Whois-Dienste, 30 steht für die Zeit in Sekunden, die für die
  ## Abfrage zur Verfügung steht.
  $fp    = fsockopen($server, 43, $errno, $errstr, 30);
  if (!$fp)
  {
    printf("Error: %s (%s)", $errstr, $errno);
    $data = 0;
  }
  else
  {
    ## Die Abfrage selbst muss mit einem Zeilenende abgeschlossen werden.
    $lookup .= "\n";
    ## Senden der Abfrage.
    fputs($fp, $lookup);
    ## Die Funktion "fread" wartet auf die Antwort.
    $data    = fread($fp, 16384);
    fclose($fp);
  }
  return $data;
} 
?>
<form method="POST" action="<?php echo $_SERVER['PHP_SELF'] ?>">
  Whois-Server:
  <select name="server">
    <option value="whois.ripe.net">Ripe</option>
    <option value="whois.denic.de" selected>DE</option>
    <option value="whois.nic.ch">CH</option>
    <option value="whois.networksolutions.com">COM/EDU</option>
  </select>
  Domain: <input type="text" name="lookup" />
  <input type="submit" value="Abfrage starten" />
</form>
<p />
<?php
if (isset($_POST['lookup']) && strlen($_POST['server']) > 3)
{
  echo "Die Abfrage dauert ein paar Sekunden, bitte waren Sie";
  flush();
  $data = lookup($_POST['lookup'], $_POST['server']);
  printf("<pre>\n%s\n</pre>\n", $data);
}
?>