XML platformlar arası bir haberleşme dili olarak daha hızlı evrensel bir dildir. Xml
bazılarına göreyse yeni bir web devrimidir.XML bazen dokümanları depolamak amacı ile bir
veri tabanı olarak kullanılır.Fakat XML nin temel amacı veri depolamak değildir.XML in
geliştirilmesinin temel amacı bir sistemden diğerine ortak bir format içinde bilgileri
geçirmektir.XML (eXtensible Markup Language) bir data formatıdır.XML yapılandırılmış
dokümanların web üzerinde el değiştirilmesi için geliştirilmiştir. World Wide Web
consortium(w3c) tarafından tanımlanmış bir standarttır. XML hakkında bilgiye ve onunla
ilişkili teknolojiler http://www.w3.org/XML adresinden bulunabilir.
VOCABULARY
XML dokümanları ile çalışırken bir çok bilinmeyen terim ile karşılaşabilirsiniz.Aşağıdaki
örnek bir xml dokümanını gösterir o bir xhtml dokümanıdır.
<?xml version=”1.0″ encoding=”ISO-8859-1″ ?>
<!DOCTYPE html
PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN”
“http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml” xml:lang=”en” lang=”en”>
<head>
<title>XML Example</title>
</head>
<body background=”bg.png”>
<p>
Moved to <a href=”http://example.org/”>example.org</a>.
<br />
foo &amp; bar
</p>
</body>
</html>
lk satır XML bildirimidir.xml versiyonunu ve xml encode dosyasını belirtir.Bu satır <? le
başlar.Bu dosyayı
bir PHP scripti olarak kullanırsanız bir problem ortaya çıkabilir.Eğer
php.ini dosyanızda shor_open_tag=On ayarına sahipseniz ki bu bir varsayılan ayardır.PHP bu
karakter kombinasyonunu gördüğünde(<? ) bunun bir php bölümü açılışı olduğunu sanar.Eğer
1-14
XML Dokümanlarının PHP ile Kullanılması
XML ile çalışırken bu şekilde bir problemle karşılaşmak istemiyorsanız PHP shor_open_tag
ayarını off yapınız.
XML bildirisinden sonara 3 satır boyunca DOCTYPE bildirisni görürüz.Bu bildiri < > içinde
yazılır.Bu kısım XML içindeki ana tagın <html> olduğu bildirilir. PUBLIC “-//W3C//DTD
XHTML 1.0 Transitional//EN” bildirisi dokümanın tipini bildirir ve Doküman Tip Tanımının
(Document Type Defination) http://www.w3.org/TR/xhtml1/DTD/ /xhtml1-transitional.dtd
adresinde bulanabileceği bildirilir.Bir DTD dosyası bir dokümanın tip yapısını tanımlar.
Dokümanının geri kalanı içeriğin kendisinden meydana gelir ve root element ile başlar ayrıca
ana düğüm olarak ta adlandırılır.
<html
xmlns=”http://www.w3.org/1999/xhtml” xml:lang=”en” lang=”en”>
XHTML 1.0 Transitional DTD ye göre root element bir xmls bildirisi içerir XHTML
namespace si için.Bir namespace iki ayrı doküman tipinin bir varlıkta birleşimini bir XML
içinde bulunmasını sağlar.Örnek olarak XHTML içinde gömülü olan MatML
Root elementinin çocuk düğümleri
<head>
<title>XML Example</title>
</head>
<body background=”bg.png”>
<p>
Moved to <a href=”http://example.org/”>example.org</a>.
<br />
foo &amp; bar
</p>
</body>
The head tags (<head>and</head>) enclose the nested title tag that specify the title XML
Example.
Head tagları başlık tagınını(title) çevir title tagı XML örneğinin başlığını bildirir.
Body tagı arkapalanın(backgraund) niteliklerini içerir. Attribute belirli bir tag hakkında ilave
bilgiler içirir.XML standartları bir değere sahip olamak için bütün attributeleri ister.Attribute
için bir değer çift veya tek tırnek işareti içinde verilmelidir.Xml dökümanın başından sonuna
değin tek tırnak kullanılması tavsiye edilir fakat bu bir zorunluluk değildir.Bu örnekte
background attribute bir background resmi belirtir bu resim bg.png dosyası içinde bulunur.
Bütün açık(<p>) taglar uygun bir kapanış tagına ihtiyaç duyar örneğin </p>
Bir element içeriğe sahip olamaz. çeriği tagların arasına yerleştirirsiniz.
2-14

XML Dokümanlarının PHP ile Kullanılması

Bazı özel karakterler probleme sebep olabilir.Örneğin <,> karakterleri taglar için
kullanılır.XML içinde kullanılan <,>karakterlerine bir tag olarak davranılır.
Entity kavaramı özel karakterlerin kullanılması olanaklı kılmak için kullanılır.
Entity karakter kombinasyonudur.Bu kombinasyon bir & karakteri ile başlar ve ; karakteri ile
biter.
XML dokümanı içinde özel karakterleri kullanmak yerine bu kombinasyonu kullanabilirisin.
Entity ler olması gerektiği gibi tanınırlar ve özel karakterler olarak davranılmazlar.
Örneğin < karakterini göstermek için &lt; kombinasyonunu ve < karakterini göstermek içinse
&gt; karakterini kullanabilirsin.
Entity leri kullandığın zaman özel karakterler dokümanına dahil edilir ve bunlara bir tag
olarak davranılmazlar.
Entity ler ayrıca ascii olamayan karakterlerin dokümanınıza girilmesi içinde kullanılır örneğin
€ ve ë karakterleri.Bu iki karakter için entity ler &euro; ve &euml; dir. http://www.w3.org/
TR/REC-html40/sgml/entities.html. özel karakterler için entity listesidir.& karakter için
&amp;

XML DÖKÜMANLARINI ÇÖZÜMLEMEK
XML DÖKÜMANININ ÇÖZÜMLENMESI

Xml dokümanı okumak için iki teknik kullanılır :SAX(Simple Api for XML )
DOM(Document Object Model).SAX :XML dokümanı boyunca ilerlerken her tag
başlangıcında ve bitişinde ya da farklı bir element ile karşılaşıldığında bir olay ateşlenir.Bu
ateşlenen olaylara hangi fonksiyonları bağlayacağını ve bu fonksiyonların bu olaylar
karşılığında hangi komutlarla karşılık vereceğini kodlamalısın. (nasıl yöneteceğine karar
vermelisin.)DOM:Bu metoda göre tüm XML bir ağaç yapısındadır.Bu ağaç yapısı içinde PHP
fonksiyonları kullanarak gezinebilirsin
Not:PHP diğer bir yol daha sunar bu yol SimpleXML Extension u kullanmaktır.
S.imple A.pi for X.ml (SAX)
lk olarak bir parser nesnesi yaratmalıyız ve daha sonra bu olayları yönetmek için kodlarımız
yazmalıyız.
$xml = xml_parser_create(‘UTF-8′);
Bu fonksiyon başarı ile çalıştığı zaman ,bir XML parser yöneticisi döndürür Bu yönetici diğer
XML parsing fonksiyonları ile kullanılır.
3-14
XML Dokümanlarının PHP ile Kullanılması
Sax olay yönetimi mantığı ile çalışır.Bu olayları yönetmek için olay yöneticileri (fonksiyon
lar) geliştirmeliyiz.Bu temel örnekte üç olayı yönetmeye çalışacağız bu olaylar;tag açılışı ,tag
kapanışı ve karakter verisine rastlanması olaylarıdır.Bu olaylar önemlidir.
xml_set_element_handler($xml, ‘start_handler’, ‘end_handler’);
xml_set_character_data_handler($xml, ‘character_handler’);
Bu fonksiyonlar ile iki yöneticiyi tanımlarız.Bu tanımlamalar herhangi bir olay meydana
gelmeden yapılamalıdır.Şimdi yönetici fonksiyonların nasıl tanımlandığına bakalım.
Bir önceki ifadede start_handler yönetici fonksiyonu üç parametreyi alır. lk parametre XML
parser object ,ikincisi tagın ismi ,son parametre ise bir dizidir.Bu dizide taga ait tanımlayıcı
attribute ler.

TAG BAŞLANGICI

Tag isimleri varsayılan olarak büyük harf ile geçirilir.Bu durumu değiştirmek için aşağıdaki
ifadeyi kullanın.Bu ifadedeki xml değişekeni xml parser nesnesidir.
xml_parser_set_option($xml, XML_OPTION_CASE_FOLDING, false);
function start_handler ($xml, $tag, $attributes)
{
global $level;
echo “n”. str_repeat(‘ ‘, $level). “>>>$tag”;
foreach ($attributes as $key => $value) {
echo ” $key $value”;
}
$level++;
}
TAG KAPANIŞI
Sadece XML nesnesi ve tag ismi gönderilir.
function end_handler ($xml, $tag)
{
global $level;
$level–;
echo str_repeat(‘ ‘, $level, ‘ ‘). “<<<$tag;
}
Bütün içiriği göstermekte kullanacağız birde karakter yöneticisine ihtiyacımız olacak.Bu
yönetici içinde gösterilecek olan içiriğin düzgün görünmesi için içerik düzenlenir.
function character_handler ($xml, $data)
{
global $level;
$data = split(“n”, wordwrap($data, 76 – ($level * 2)));
4-14
XML Dokümanlarının PHP ile Kullanılması
foreach ($data as $line) {
echo str_repeat(($level + 1), ‘ ‘). $line. “n”;
}
}
Bütün olay yöneticilerimiz tanımladıktan sonra XML dosyamızı çözümlemeye başlayabiliriz.
xml_parse($xml, file_get_contents(‘test1.xhtml’));
Tüm scriptin kodları:
1. <?php
2. function startElement($xml_parser, $name, $attributes) {
3. print(“<p><i>Encountered Start Element For:</i>$namen”);
4. }
5.
6. function endElement($xml_parser, $name) {
7. print(“<p><i>Encountered End Element For:</i>$namen”);
8. }
9.
10. function characterData($xml_parser, $data) {
11. if($data != “n”) {
12.
print(“<p><i>Encountered Character Data:</i>$datan”);
13. }
14. }
15.
16. function load_data($file) {
17. $fh = fopen($file, “r”) or die (“<P>COULD NOT OPEN FILE!”);
18. $data = fread($fh, filesize($file));
19. return $data;
20. }
21. /***** MAIN *****/
22. $file = “simple.xml”;
23. $xml_parser = xml_parser_create();
24. xml_set_element_handler($xml_parser, “startElement”, “endElement”);
25. xml_set_character_data_handler($xml_parser, “characterData”);
26. xml_parse($xml_parser, load_data($file)) or
27. die (“<P>ERROR PARSING XML!”);
27. xml_parser_free($xml_parser);
28.?>
SP LT:
Bir dizi döndürür.Eleman sayısı son parametre ile sınırlandırılabilir. lk parametre ile string
parçalara bölünür.Her parça fonksiyonun dönüş dizisinin bir elemanının karşılığıdır. kinci
parametre ise parçalara ayrılacak string tipinde değişkendir.
array split ( string pattern, string string [, int limit])
<?php
// Delimiters may be slash, dot, or hyphen
5-14
XML Dokümanlarının PHP ile Kullanılması
$date = “04/30/1973″;
list($month, $day, $year) = split(‘[/.-]’, $date);
echo “Month: $month; Day: $day; Year: $year<br />n”;
?>
$date değişkeni slash nokta ya da tire karakteri ile parçalara ayrılır ve her parça dönüş
dizisindeki bir elemana atanır.Sonra bu dizinin elemanları sırası ile $month,$day ve $year
değişkenlerinde saklanır ve ekrana yazdırılır.Bu örnekteki materyal olan string düzenli bir
ifade kullanılarak parçalara yarılmıştır.
Document Object Model(D.O.M)
SAX metodu ile xhtml veya xml dokümanlarını çözümleme işlemi için çok kod yazmamız
gerekir.DOM metodu çok daha basittir fakat bunun bir bedeli vardır –bellek kullanımı.Fakat
böyle olmakla beraber bizim küçük örneğimiz için bu dikkate alınmayabilir.Fakat dosya
20MB büyüklüğünde olduğunda DOM metodunu kullanırken buna kesinlikle dikkat
etmeliyiz.DOM XML dosyanız içindeki her bir elementin ateşlenen olayı için bellekte bir
ağaç yapısı oluşturur.
Biz tree nesnesi boyunca yürüyerek taglar olmadan tüm içeriği gösterebiliriz.
1 <?php
2 $dom = new DomDocument();
3 $dom->load(‘test2.xml’);
4 $root = $dom->documentElement;
5
6 process_children($root);
7
8 function process_children($node)
9{
10 $children = $node->childNodes;
11
12 foreach ($children as $elem) {
13 if ($elem->nodeType == XML_TEXT_NODE) {
14 if (strlen(trim($elem->nodeValue))) {
15 echo trim($elem->nodeValue).”n”;
16 }
17 } else if ($elem->nodeType == XML_ELEMENT_NODE) {
18 process_children($elem);
19 }
20 }
21 }
22 ?>
Taglara ait olan attribute değerlerini elde etmek için getattribute metodu kullanılır.Bu metot
domelement sınıfına aittir.
$elem->getAttributeNode(‘background’);
6-14

XML Dokümanlarının PHP ile Kullanılması

<?php
$dom = new DomDocument();
$dom->load(‘test2.xml’);
$body = $dom->documentElement->getElementsByTagName(‘body’)->item(0);
echo $body->getAttributeNode(‘background’)->value. “n”;
?>
Belirli
bir
elementinin
attribute
değerini
elde
etmek
için
$tag_ismi=getElementsByTagName(‘tag
ismi’)->item(0);
ile
element
elde
edilir.getAttributeNode(‘attribute_ismi’)->value; ile elemente ait olan attribute değeri elde
edilir.
Creating Dom Tree
DOM uzantısı XML dosyasını çözümlemekten daha fazlasını yapabilir.Bu uzantı ayrıca bir
XML doküman yaratabilir.Kodun içerisinden bir nesne ağacı oluşturabilirsin ve bunu bir xml
dosyası olarak diskte saklayabilirsin.
<?php
$dom = new DomDocument();
$html = $dom->createElement(‘html’);
$html->setAttribute(“xmlns”, “http://www.w3.org/1999/xhtml”);
$html->setAttribute(“xml:lang”, “en”);
$html->setAttribute(“lang”, “en”);
$dom->appendChild($html);
$head = $dom->createElement(‘head’);
$html->appendChild($head);
$title = $dom->createElement(‘title’);
$title->appendChild($dom->createTextNode(“XML Example”));
$head->appendChild($title);
/* Create the body element */
$body = $dom->createElement(‘body’);
$body->setAttribute(“backgound”, “bg.png”);
$html->appendChild($body);
/* Create the p element */
$p = $dom->createElement(‘p’);
$body->appendChild($p);
/* Add the “Moved to” */
$text = $dom->createTextNode(“Moved to “);
$p->appendChild($text);
/* Add the a */
$a = $dom->createelement(‘a’);
$a->setAttribute(“href”, “http://example.org/”);
$a->appendChild($dom->createTextNode(“example.org”));
$p->appendChild($a);
/* Add the “.”, br and “foo & bar” */
$text = $dom->createTextNode(“.”);
$p->appendChild($text);
$br = $dom->createElement(‘br’);
$p->appendChild($br);
$text = $dom->createTextNode(“foo & bar”);
7-14
XML Dokümanlarının PHP ile Kullanılması
$p->appendChild($text);
echo $dom->saveXML();
?>
DomDocument sınıfı new DomDocument ile yaratılır.createElement çağrısı ile bütün
elementler oluşturulur.

COMMUNICATING WITH XML

Uygulamalar bir çok yolla internet yolu ile haberleşirler.Bunların bir çoğunu zaten
biliyorsunuz.TCP/IP ve UDP/IP kullanılır fakat bunlar düşük seviyeli aktarım
protokolleridir.Sistemler arasında haberleşme zordur. Bunu sebebi sistemlerin hafızaları
içinde tutukları datayı farklı metotlar ile saklamalarınıdır.Başka bir nokta ise insanların
platformlar arasında sağlam ve güvenilir bir teknoloji istemesidir.Bir çözüm :RPC(Remote
Procedure Calls)Fakat bu metodu kullanmak kolay değildir çünkü Windows sistemlerdeki
tanımlama Unix sistemlerden faklıdır.XML genellikle en iyi çözümdür.XML farklı
platformlar üstündeki uygulamaların standart bir formatı kullanarak haberleşmesini olanaklı
kılar.XML ASCII datadır.Bu yüzden sistemler arasındaki farklılık minimize edilmiştir.Diğer
bir fark iki sistemin farklı tarih gösterimleidir : Dec 25 16:58:40 CET 2002, Wed 2002-12-25.XML-RPC
ve SOAP XML tabanlı protkoldür.SOAP geniş bir protokoldür ve özellikle haberleşme için
tasarlanmıştır.

XML –RPC

XML-RPC istek ve yanıt protokolüdür.Sunucuya tapılan her request
bir response
döndürür.Response geçerli bir yanıt olabileceği bir hata da olabilir.Request ve Response
paketleri bir XML olarak kodlanır.Paketler içindeki değerler farklı imler(<array /> ,<data
/>…) ile kodlanır. XML-RPC şartnamesinde bir takım tipler tanımlanır.Veriler bu tiplere
dönüştürülerek taşınırlar.
XML-RPC Type Description Example Value
<i4 /> or <int /> Four-byte signed integer -8123
<boolean /> 0 (false) or 1 (true) 1
<string /> ASCII string Hello world
<double /> Double-precision signed
floating-point number
91.213
<dateTime.iso8601 /> Date/time 200404021T14:08:55
<base64 /> Base 64-encoded binary eW91IGNhbid0IHJlYWQgdGhpcyE
Bir değer iletildiğinde o <value/> imi içine yazılır. Aşağıdaki gibi
<value><dateTime.iso8601 />20021221R14:12:81</dateTime.iso8601><value>
Bileşik veriler <array /> imi ile tanımlanırlar.Bu im ile tanımlanan veriler ilişkisel değildirler
lişkisel dizleri için <struct /> imi kullanılır.
<array>
<data>
<value><int>1</int></value>
<value><string>Hello!</string</value>
8-14
XML Dokümanlarının PHP ile Kullanılması
</data>
</array>
Göründüğü gibi 1 ve Hello! Değeri <data /> imi içindedir.Bu im <array /> iminin çocuk
imidir.Bundan başka <struct /> imi değerler ile ilişkili bir anahtara sahiptir.Böylelikle XML
dokümanı biraz daha karmaşık bir yapıda gözükür.
<struct>
<member>
<name>key-een</name>
<value><int>1</int></value>
</member>
<member>
<name>key-zwei</name>
<value><int>2</int></value>
</member>
</struct>
Request ve Response içinde datalar farklı özel imlerin içindedirler .
RESPONSE
XML-RPC içindeki Request http sunucusu üzerindeki normal POST requestidir. Fakat bazı
özel ilavler vardır.
<?xml version=”1.0″?>
<methodCall>
<methodName>hello</methodName>
<params>
<param>
<value><string>Derick</string></value>
</param>
</params>
</methodCall>
Her bir RPC request çağrısı <meodCall /> iminden meydana gelir.Bunu metot ismi imi
takip eder bu im uzak metot ismini belirtir. Her bir parametre param elementi içine
geçirilir.Param imleri params imi ile gruplandırılır.Params elementi metot ismini belirten imin
alt imidir.Bu XML-RPC paketi hello uzak fonksiyonunu çağırır ve Deric parametresini
geçirir.

RESPONSE

Fonksiyon çağrısından sonra bir XML- RPC response çağırıcı programa döndürülür.Bu
response XML olarak kodlanmıştır.Burada temel olarak iki tip response ile
karşılaşılabilir.Normal response veya bir hatayı bildiren response.
Normal bir response <metodResponse /> iminin alt imi olan <params /> ile ayır
edilebilir.Başarılı bir metodResponse her zaman bir <params /> alt imine sahiptir.Bu im ise
her zaman bir <param> alt elementine sahiptir.Fonksiyonun içinden birden fazla değer
döndüremezsin .Fakat bir <array /> yada <struct /> imi döndürebilirsin.Bir önceki bölümün
içindeki requeste ait olan sonucu metodResponse gösterir.
9-14
XML Dokümanlarının PHP ile Kullanılması
<?xml version=”1.0″?>
<methodResponse>
<params>
<param>
<value><string>Hi Derick!</string></value>
</param>
</params>
</methodResponse>
Fault
Bütün istekler(request) normal bir yanıt(response) döndürmezler ve her şey beklenildiği gibi
çalışmayabilir.Her şey istenildiği gibi çalışmadığı zaman bir <fault /> imi döndürülür.Bu im
<params /> elementinin yerine geçer.<fault /> imi iki üyeye sahip bir <struct /> imi içerir.Bu
üyeler faultCode ve faultString imleridir.
<?xml version=”1.0″?>
<methodResponse>
<fault>
<value>
<struct>
<member>
<name>faultCode</name>
<value><int>3</int></value>
</member>
<member>
<name>faultString</name>
<value><string>Incorrect parameters passed to method<
string></value>
</member>
</struct>
</value>
</fault>
</methodResponse>
The Client
Bizim lokal makinemizden XML-RPC fonksiyonunu çağırmak için basit bir client script
yazacağız.Bu uygulama için XML_RPC Pear Sınıfı kullanacağız.
<?php
require_once “XML/RPC.php”;
$client = new XML_RPC_Client(‘/chap_14/xmlrpc_example.php’,’localhost’);
lk olarak XML_RPC sınıfını include edilir ve bir XML_RPC Client nesnesi hazırlanır.
Nesne Yapılandırıcısı(constructor) içindeki ilk parametre uzak makine üzerindeki XML_RPC
sunucusunun yoludur. kinci parametre ise makinenin ismidir.
10-14
XML Dokümanlarının PHP ile Kullanılması
function call_method (&$client, &$msg)
{
/* Send the request */
$p = $client->send($msg);
/* Check for an error, and print out the error message if
* necessary */
if (PEAR::isError($p)) {
echo $p->getMessage();
}else {
/* Check if an XML RPC fault was returned, and display
* the faultString */
if ($p->faultCode()) {
print $p->faultString();
return NULL;
} else {
/* Return the value upon a valid response */
$res = $p->value();
return $res;
}
}
}
Bir fonksiyon yazarak devam ediyoruz bu fonksiyon XML_RPC_ CLIENT nesnesini
kullanarak uzak fonksiyonu çağırır ve bir hata kodu dönüp dönmediğini kontrol eder.
/* Construct the parameter array */
$vals = array (
new XML_RPC_Value(‘Derick’, ‘string’)
);
/* Construct the message with the functionname and
* the parameter array */
$msg = new XML_RPC_Message(‘hello’, $vals);
/* Send the message and store the result in $res */
$res = call_method($client, $msg);
/* If the result is non-null, decode the XML_RPC_Value into a PHP
* variable and echo it (we assume here that it returns a
* string */
if ($res !== NULL) {
echo XML_RPC_decode($res).”n”;
}
XML_RPC fonksiyonunu daha önce tanımladığız fonksiyon ile çağırırız.Bundan önce bu
fonksiyona geçirilecek olan parametreler düzenlenir.Parametreler için tipler tanımlanır.
Fonksiyona parametrelerin tipleri açık yada dolayalı olarak geçiririz.XML_RPC_Message
nesnesinde fonksiyon adını , fonksiyona geçilecek parametrenin değer ve tipini belirten
parametreyi belirtiriz.
11-14
XML Dokümanlarının PHP ile Kullanılması
XML_RPC_Value nesnesini kullanmak yerine XML_RPC_encode(<value>) çağrısı ile PHP
değiken tiplerini en uygun XML-RPC değişken tiplerine dönüştüren fonksiyonu da
kullanabilir.
Aşağıdaki örnek iki double değişkenini adds fonksiyonuna geçer ve bu fonksiyon ise iki
sayıyı toplayıp bir sonuç döndürür.
/* Somewhat more example with explicit types and multiple parameters */
$vals = array (
XML_RPC_encode(80.9),
XML_RPC_encode(-9.71)
);
$msg = new XML_RPC_Message(‘add’, $vals);
$res = call_method($client, $msg);
echo XML_RPC_decode($res).”n”;
XML_RPC_decode fonksiyonu XML_RPC_encode fonksiyonunun tam teri
yapar.XML_RPC tiplerinden uygun PHP tiplerine değişkenlerin tiplerini dönüştürür.
işlem

RETROSPECTION

Internet üzerinde bir yerde XML-RPC sunucusu ile karşılaşırsan hangi fonksiyonun
kullanabileceğini öğrenmek isteyebilirisin.XML-RPC desteklene fonksiyonları bulur bu size
server üzerinde fonksiyon çağrısı için gerek tüm bilgileri sunar.Retrospection olarak
adlandırılır.’system.listMethods’ fonksiyonu ile bir dizi elde edebilirisin.Bu dizi bütün dış
fonksiyonları içerir.
/* Complex example which shows retrospection */
$msg = new XML_RPC_Message(‘system.listMethods’);
$res = call_method($client, $msg);
foreach (XML_RPC_decode($res) as $item) {
$vals = array (XML_RPC_encode($item));
$msg = new XML_RPC_Message(‘system.methodHelp’, $vals);
$desc = XML_RPC_decode(call_method($client, $msg));
$msg = new XML_RPC_Message(‘system.methodSignature’, $vals);
$sigs = XML_RPC_decode(call_method($client, $msg));
$siginfo = ”;
foreach ($sigs[0] as $sig) {
$siginfo .= $sig. ” “;
}
echo “$itemn”. wordwrap($desc). “nt$siginfonn”;
}
?>

SERVER

Server yazmak bir client yazmaktan daha zor değildir.XML/RPC.php dosyasını eklemek
yerine, sunucu fonksiyonlarını yerine getiren server.php dosyasını ekleyeceğiz.
getValues: Bu metodu bir dizi döndürür .Bu dizinin her parametresi fonksiyona geçirilir.
XML_RPC_decode:Her eleman XML RPC tipinden PHP tiplerine dönüştürülür.
12-14
XML Dokümanlarının PHP ile Kullanılması
Biz basitçe bir XML_RPC_Values nenesi döndürürüz.Bu nesne string tipinde bir sonuç içirir.
Fonksiyonların dışarıdan elde edilebilir olması için bunları tanımalıyız. Fonksiyona geçirilen
parametreler fonksiyon ismi fonksiyon açıklaması bir dizi içine yerleştirmeliyiz.Her
fonksiyon için ayrı dizler oluşturulur.Tanımlanmış fonksiyonların elde edilebilir olması için
hazır XML_RPC sınıfını kullanırız.Bu sınıfın kurucusu istekleri(request) ve fonksiyon
çağrılarını çözümler.
Client Script Kodları:
<?php
//istemci
$path=$_SERVER[‘DOCUMENT_ROOT’];
$path=$path.”/../php/pear/XML/RPC.php”;
require $path;
$client=new XML_RPC_Client(‘/server/myserver.php’,’localhost’);
function call_method(&$client, &$msg)
{
/* Send the request */
$p = $client->send($msg);
$res = $p->value();
return $res;
}
echo “Siniftan nesne üretildi ve foksiyon tanimlandi.”;
$msg = new XML_RPC_Message
(“hello”, array(new XML_RPC_Value(‘Wild Bison’, ‘string’)));
$res = call_method($client, $msg);
if ($res == NULL) {
echo “deger yok”;
}else echo XML_RPC_decode($res).”n”;
echo “<br> iki sayinin toplami:<br>”;
$vals=array(
XML_RPC_encode(14.0),
XML_RPC_encode(20.2),
);
$msg=new XML_RPC_Message(‘add’, $vals);
$res=call_method($client,$msg);
echo XML_RPC_decode($res);
?>
Server Script Kodları:
<?php
$path=$_SERVER[‘DOCUMENT_ROOT’];
$path=$path.”/../php/pear/XML/RPC/Server.php”;
require($path);
function hello($args)
{
$val=$args->getParam(0);
$val=$val->scalarval();
13-14
XML Dokümanlarının PHP ile Kullanılması
$val=”Hi $val !”;
return new XML_RPC_Response(new XML_RPC_Value($val, ‘string’));
}
function add($args)
{
$val0=$args->getParam(0);
$val0=$val0->scalarval();
$val1=$args->getParam(1);
$val1=$val1->scalarval();
return new XML_RPC_Response(new XML_RPC_Value($val0+$val1,’double’));
}
$method = array(
‘hello’=>array( ‘function’=>’hello’,
‘signature’=>array( array($GLOBALS[‘XML_RPC_String’], $GLOBALS[‘XML_RPC_String’])),
‘docstring’ =>’Greets you.’),
‘add’=>array( ‘function’=>’add’,
‘signature’=>array(
array($GLOBALS[‘XML_RPC_Double’],$GLOBALS[‘XML_RPC_Double’],$GLOBALS[‘XML_RPC_Double’])),
‘doc string’=>’iki sayiyi toplar’));
$server = new XML_RPC_Server($method);
?>

Etiketler: ,

Yorum Yap

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*

Şu HTML etiketlerini ve özelliklerini kullanabilirsiniz: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">