5.1. XML-RPC mit PHP

Für den Zugriff auf den GREYHOUND Server über PHP wird eine vollständige Klassenbibliothek bereitgestellt. Diese GREYHOUND PHP API ist der empfohlene Weg, Daten mit dem GREYHOUND Server auszutauschen. Das unten stehende Beispiel funktioniert zwar nach wie vor, die GREYHOUND PHP API übernimmt jedoch die technischen Details und stellt für die Datenstrukturen und Dienste der RPC Schnittstelle eigene Klassen bereit, um die Arbeit zu vereinfachen.

Für dieses Beispiel wird die Bibliothek XML-RPC for PHP in der Version 3.0.0 verwendet. Die Bibliothek ist in ein Verzeichnis unterhalb des Webservers zu entpacken und der Ordner so zu benennen, dass die README der Bibliothek über http://localhost/xmlrpc/README erreichbar ist.
In diesem Ordner wird nun eine Datei demo.php mit folgendem Inhalt angelegt:
demo.php Quelltext:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
<?php
/*****************************************************************************************/
/* Dies ist ein Beispiel für die Interaktion zwischen GREYHOUND und PHP mittels XML-RPC. */
/* Sie können dieses Beispiel verändern und in eigenen Skripten frei verwenden.          */
/*****************************************************************************************/

define('GREYHOUND_HOST''127.0.0.1'); // Der Hostname oder die IP-Adresse Ihres GREYHOUND
define('GREYHOUND_PORT'81); // Der Port des HTTP-Servers
define('GREYHOUND_USER''admin'); // Der Name des Benutzers mit entsprechenden Rechten
define('GREYHOUND_PASS''admin'); // Das Passwort des Benutzers
define('GREYHOUND_SSL'false); // Ist GREYHOUND für die Verwendung von SSL konfiguriert?
define('GREYHOUND_TIMEOUT'10); // Maximale Wartezeit in Sekunden

// Bindet die XML-RPC for PHP Bibliothek ein:
include_once(dirname(__FILE__) . '/lib/xmlrpc.inc');

// Generiert eine Unique-ID, wie unter HTTP-Protokolle beschrieben:
$uniqueid md5('XML-RPC for PHP' microtime() . '-' rand(199999999));

// Bereitet das XML-RPC for PHP Objekt für eine Verbindung zu GREYHOUND vor:
$xmlrpc = new xmlrpc_client(
  (
GREYHOUND_SSL 'https' 'http') . '://' .
  
$uniqueid '-' GREYHOUND_USER ':' .
  
GREYHOUND_PASS '@' .
  
GREYHOUND_HOST ':' .
  
GREYHOUND_PORT '/xmlrpc/'
);

if(
GREYHOUND_SSL)
{
  
$xmlrpc->setSSLVerifyHost(0); // Deaktiviert die Zertifikatsprüfung
  
$xmlrpc->setSSLVerifyPeer(0); // für selbst erstellte Zertifikate.
}

// Nun wird die Anfrage erzeugt. Die Anfrage soll alle Elemente Abrufen, welche keinen
// Bearbeiter haben und vom Typ E-Mail, Telefax, Brief, Kurzmitteilung oder Telefongespräch
// sind. Die möglichen Parameter dieser Funktion, werden in RpcItems.GetList beschrieben.

// Nun wird der gewünschte RpcItemFilter erzeugt:
$RpcFilter = new xmlrpcval(
  array(
    
'UserRefs' => new xmlrpcval(
      array(
        new 
xmlrpcval(0'i4')
      ),
      
'array'
    
),
    
'Kinds' => new xmlrpcval(31'i4'// RpcItemKinds: ikEmail + ikFax + ikLetter + ikMessage + ikCall
  
),
  
'struct'
);

// Nun wird die Anfrage an den GREYHOUND Server gesendet:
$response $xmlrpc->send(
  new 
xmlrpcmsg(
    
"RpcItems.GetList"
    array(
      
$RpcFilter,
      new 
xmlrpcval(9'i4'), // iobStartDate
      
new xmlrpcval(1'i4'), // iodDescending
      
new xmlrpcval(0'i4'), // Offset = 0
      
new xmlrpcval(792578'i4'), // RpcListValues: lvGroupName + lvState + lvKind + lvSubject + lvNumber
      
new xmlrpcval(array(), 'array')
    )
  ), 
  
GREYHOUND_TIMEOUT
);

// Wenn kein Fehler aufgetreten ist, wird das Ergebnis nun einfach ausgegeben.
if($response->faultCode() == 0)
{
  
// Die Funktion php_xmlrpc_decode vereinfacht die Arbeit mit dem Ergebnis, 
  // entfernt aber Informationen über den Datentyp. Sie können auch direkt mit
  // $response->value() arbeiten. Eventuell ist die Auswertung des Ergebnisses
  // dann aber etwas komplizierter. Schauen Sie hierfür bitte in die Dokumentation
  // der XML-RPC for PHP Bibliothek
 
  
echo '<pre>';
  
print_r(php_xmlrpc_decode($response->value()));
  echo 
'</pre>';
}
else
  echo 
'Es ist ein Fehler aufgetreten: ' $response->faultString();
?>
Die XML-RPC for PHP Bibliothek gibt unter PHP 5.0.0 bis 5.3.0 eventuell eine E_STRICT Warnung für die Verwendung der Funktion is_a aus. Diese Funktion war zeitweise als Deprecated gekennzeichnet. Sie können diese Warnung in den PHP Einstellungen deaktivieren oder eine neuere PHP Version verwenden.