PHP-Skript zum Hochladen des Telefonbuchs auf Mobilteile

xoox

Neuer User
Mitglied seit
18 Aug 2006
Beiträge
18
Punkte für Reaktionen
0
Punkte
0
Hallo,

hier ein kleines Skript zum Hochladen des Telefonbuchs auf die Mobilteile. Es funktioniert bei mir mit dem S685 IP, müsste aber theoretisch auch mit den anderen funktionieren.

PHP:
<?php
function PostToHost($host, $path, $referer, $data_to_send, $headers = array(), $boundary = "") {
  $fp = fsockopen($host, 80);
  fputs($fp, "POST $path HTTP/1.1\r\n");
  fputs($fp, "Host: $host\r\n");
  fputs($fp, "Referer: $referer\r\n");
  if ($boundary != "")
    fputs($fp, "Content-type: multipart/form-data; boundary=$boundary\r\n");
  else
    fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
  fputs($fp, "Content-length: ". strlen($data_to_send) ."\r\n");
  fputs($fp, "Connection: close\r\n");
  foreach($headers as $item) {
    fputs($fp, $item."\r\n");
  }
  fputs($fp, "\r\n");
  fputs($fp, $data_to_send);
  while(!feof($fp)) {
      $res .= fgets($fp, 128);
  }
  fclose($fp);

  return $res;
}

function GetFromHost($host, $path, $referer, $headers) {
  $fp = fsockopen($host, 80);
  fputs($fp, "GET $path HTTP/1.1\r\n");
  fputs($fp, "Host: $host\r\n");
  fputs($fp, "Referer: $referer\r\n");
  fputs($fp, "Connection: close\r\n");
  foreach($headers as $item) {
    fputs($fp, $item."\r\n");
  }
  fputs($fp, "\r\n");
  while(!feof($fp)) {
      $res .= fgets($fp, 128);
  }
  fclose($fp);

  return $res;
}

function uploadPhonebook($vcfText, $ip, $pass, $ports = array(0), $debug = false) {
  $res = PostToHost($ip, "/login.html", "http://$ip/", "language=2&password=$pass");
  if ($debug) echo "<h2>Login</h2>".nl2br($res);
  if (eregi("Set-Cookie: *key=([^;]+);", $res, $regs)) {
    $cookie = $regs[1];
  }
  
  if ($cookie) {
    $res = GetFromHost($ip, "/home.html", "http://$ip/login.html", array("Cookie: key=$cookie"));
    if ($debug) echo "<h2>Home</h2>".nl2br($res);
    
    foreach($ports as $port) {
      $boundary = "----------------------234724823483";
      $data = "--".$boundary."\r\n";
      $data .= "Content-Disposition: form-data; name=\"tdt_function\"\r\n\r\n2\r\n";
      $data .= "--".$boundary."\r\n";
      $data .= "Content-Disposition: form-data; name=\"tdt_handset_port\"\r\n\r\n$port\r\n";
      $data .= "--".$boundary."\r\n";
      $data .= "Content-Disposition: form-data; name=\"tdt_file\"; filename=\"upload.vcf\"\r\n";
      $data .= "Content-Type: text/vcard\r\n\r\n";
      $data .= $vcfText."\r\n";
      $data .= "--".$boundary."--";
      
      if ($debug) echo nl2br($data);
      $res = PostToHost($ip, "/settings_telephony_tdt.html", "http://$ip/settings_telephony_tdt.html", $data, array("Cookie: key=$cookie"), $boundary);
      if ($debug) echo "<h2>Upload</h2>".nl2br($res);
  
      $i=0;    
      do {
        sleep(1);
        $res = GetFromHost($ip, "/status.html", "http://$ip/settings_telephony_tdt.html", array("Cookie: key=$cookie"));
        if ($debug) echo "<h2>Status</h2>".nl2br($res);
        if (eregi("var *status *= *([0-9]+);", $res, $regs)) {
          $status = $regs[1];
        }
      } while ($status < 16 && $i++<20);
      
      $res = GetFromHost($ip, "/stoptdt.html", "http://$ip/status.html", array("Cookie: key=$cookie"));
      if ($debug) echo "<h2>Stop</h2>".nl2br($res);
    }

    $res = GetFromHost($ip, "/logout.html", "http://$ip/home.html", array("Cookie: key=$cookie"));
    if ($debug) echo "<h2>Logout</h2>".nl2br($res);
  }
}
?>

Bei großen Telefonbüchern sollte man noch z.B.
PHP:
set_time_limit(600);
benutzen und bei
PHP:
while ($status < 16 && $i++<20);
einen größeren wert für 20 einsetzen.
 
Klingt super interessant. Jetzt bräuchte ich nur noch Hilfe wie ich das teste. Das PHP auf einen Webserver legen der PHP unterstützt und das File dann aufrufen bringt mich nicht weiter - gibt es etwas Hinweise dazu, wie man das was du da tolles gebaut hast nutzen kann?
 
Klingt super interessant. Jetzt bräuchte ich nur noch Hilfe wie ich das teste. Das PHP auf einen Webserver legen der PHP unterstützt und das File dann aufrufen bringt mich nicht weiter - gibt es etwas Hinweise dazu, wie man das was du da tolles gebaut hast nutzen kann?
Die Loesung fuer dein Problem findest Du hier: XAMPP
... aber villeicht interresiert dich ja auch einfach nur soetwas: http://www.siemens-gigaset-forum.com/de/posts/list/12652.page

Gruss
Catalonia
 
Zuletzt bearbeitet:
Also bei mir läuft das Ganze auf einem Server im Keller, wo ich u.a. einen LDAP-Server und einen Webserver installiert habe. Wenn du das Ganze standalone benutzen willst, dann ist XAMPP bzw. XAMPPLite für dich eine gute Wahl - wie Catalonia schon geschrieben hat.

Speichere das Skript oben im DocumentRoot z.B. als s685ip.php ab und erstelle folgendes Testskript (z.B. test.php im DocumentRoot)

PHP:
<?php

include("s685ip.php");

$vcf = "BEGIN:VCARD
VERSION:2.1
N:Nachname;Vorname
TEL;HOME:0391234567
TEL;CELL:01701234567
END:VCARD
";

$ip = "192.168.0.44";   //IP-Adresse des Gigasets
$pass = "1234";  // Passwort vom Gigaset
$ports = array(0,1,2);  //die ersten drei Mobilteile

uploadPhonebook($vcf, $ip, $pass, $ports, true);

?>

Aufruf/Test dann mit http://127.0.0.1/test.php
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.