Menulis web service dengan PHP dari awal? Nanti dulu deh. Lebih baik coba dulu library yang udah ada.

IXR XML-RPC Library adalah library yang ‘tinggal pakai’ untuk developer PHP. Mengapa saya pilih IXR? Karena blog kesayangan saya, WordPress, pakai IXR. Sebenarnya masih ada beberapa pilihan lain, tetapi saya pikir IXR adalah yang paling sederhana. Hanya 1 file, sudah termasuk library untuk client maupun server.

  1. Langkah pertama, saya download file IXR_Library.inc.php.txt.
  2. Saya hilangkan ekstensi .txt, sehingga yang tersisa IXR_Library.inc.php
  3. Saya siapkan database yang diperlukan
  4. Saya tulis script XML-RPC server dengan nama index.php
  5. Saya tulis script XML-RPC client dengan nama client.php
  6. Kedua file tersebut saya taruh di direktori CherriServer di dalam htdocs apache
  7. Saya test pakai firefox, berhasil!

Jika Anda belum nyambung apa yang terjadi, tunggu versi Javanya. Akan saya tunjukkan bahwa aplikasi desktop Java bisa komunikasi dengan server PHP melalui web service XML-RPC

file dump untuk MySQL (buat dulu database dengan nama cherriserver)

– phpMyAdmin SQL Dump
– version 2.8.0.3
– http://www.phpmyadmin.net

– Host: localhost
– Generation Time: Jul 15, 2008 at 08:35 AM
– Server version: 5.0.20
– PHP Version: 5.1.2

– Database: `cherriserver`

– ——————————————————–


– Table structure for table `user`

CREATE TABLE `user` (
`userid` int(11) NOT NULL auto_increment,
`email` varchar(30) collate latin1_general_ci NOT NULL,
`realname` varchar(50) collate latin1_general_ci NOT NULL,
PRIMARY KEY  (`userid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=40 ;


– Dumping data for table `user`

INSERT INTO `user` VALUES (1, ‘amrishodiq@stsn-nci.ac.id’, ‘Amri Shodiq’);
INSERT INTO `user` VALUES (2, ‘hainun2000@yahoo.com’, ‘Nunik Yulianingsih’);

index.php

<?php
include(”lib/IXR_library.php”);

$con = mysql_connect(”localhost”, “root”, “”);
mysql_select_db(”cherriserver”);

/**
* Fungsi ini digunakan untuk menjawab pertanyaan dari client
* tentang detil user yang baru ditambahkan ke  daftar contact
* cherri client. Parameter berupa nama lengkap user, jika
* ditemukan maka detil akan dikembalikan. Jika tidak ditemukan
* fungsi akan mengembalikan error code 101 yang berarti user
* dengan nama itu tidak ditemukan.
*/
function getUserDetail($args) {
$sql = “SELECT * FROM user WHERE realname=’$args’”;
$res = mysql_query($sql);
$result = “”;
if (mysql_num_rows($res)>0) {
// ditemukan
$row = mysql_fetch_assoc($res);
$result = array(
“userid” => $row["userid"],
“email” => $row["email"],
“realname” => $row["realname"]
);

} else {
// tidak ditemukan
$result = new IXR_Error(101, “User not found”);
}

return $result;
}

/**
* Fungsi untuk meregistrasi seorang user dari remote.
* @param String realname
* @param String email (dicek dulu validitas alamat emailnya)
* @return Struct nilai kembalian adalah Struct data lengkap
* user yang diregistrasi. Mengapa data lengkap? Karena, mungkin,
* private key dan public key diberikan oleh server
*/
function register($args) {
global $con;
$sql = “INSERT INTO user (email, realname) ” .
“VALUES (’” . $args[0] . “‘, ‘” . $args[1] . “‘)”;
//echo “SQL: ” . $sql;
$res = mysql_query($sql);
$result = “”;
if ($res == true) {
// pendaftaran berhasil

$userid = mysql_insert_id($con);
//echo “User ID: $userid”;
$sql = “SELECT * FROM user WHERE userid=’$userid’”;
$res = mysql_query($sql);
$row = mysql_fetch_assoc($res);
$result = array(
“userid” => $row["userid"],
“email” => $row["email"],
“realname” => $row["realname"]
);
} else {
// INSERT gagal
$result = new IXR_Error(102, “Pendaftaran gagal”);
}
return $result;
}

$server = new IXR_Server(array(
“cherri.getUserDetail” => “getUserDetail”,
“cherri.register” => “register”
));

mysql_close($con);
?>

client.php

<?php
/*
* Created on 14 Jul 08
*
*/
include(”lib/IXR_library.php”);
$client = new IXR_Client(”http://127.0.0.1:80/CherriServer/index.php”);
$client->debug = true;
$process = $client->query(”cherri.register”, “hainun2000@yahoo.com”, “Nunik Yulianingsih”);

// Run a query for PHP
if (!$process) {
die(’Something went wrong – ‘.$client->getErrorCode().’ : ‘.$client->getErrorMessage());
} else {
echo “<pre>Hasil:\n”;
print_r($client->getResponse());
echo “</pre>”;
}

?>

10 Komentar

  1. klo file editnya gimana bro?

  2. File edit yang mana ya boss? Kalo ngedit file PHP bisa pake EasyEclipse for PHP, Dreamweaver atau Zend. Tapi notepad juga bisa kok.

  3. Info hosting gratis php & mysql
    http://www.000webhost.com/61391.html

  4. Tanya donk,kenapa ketika pesan dikirim tdk terkirim/muncul ke email saya
    scriptnya sbb:

    Nama Anda
    :
    Email Anda
    :

    Pesan
    :

    file : contact.php

    Terimakasih atas bantuannya

    Rgds,Bahsis

  5. Thanks bos, saya pelan-pelan sedang belajar memahami tentang xmlrpc untuk ping services seperti pingomatic atau mybloglog. Mudahan cepat paham hehehe

  6. Terima kasih, tapi saya mau tanya
    ITu biar tempilannya lebih bagus gimana ya?
    hehehehe

  7. Oh iya, itu kalau ada warning header already sent, sama pesan error not well formed kenapa ya?

  8. Kalo tampilan bagus ya dibikin pake HTML yang bagus mas. Header already sent biasanya terjadi ketika kita sudah menampilkan suatu string lalu tiba-tiba kita ingin mengirim header, misalnya cookie, session atau redirect.

  9. Mas,
    kenapa waktu saya coba ada error : “headers already sent”, kemudian di baris paling bawah ada error : “Something went wrong – -32700 : parse error. not well formed”

    Mohon solusi dan penjelasannya. Terima Kasih

    cherri.register

    hainun2000@yahoo.com
    Nunik Yulianingsih

    Warning: Cannot modify header information - headers already sent by (output started at C:\apache2\htdocs\mbuh1.php:1) in C:\apache2\htdocs\IXR_Library.php on line 366

  10. Coba perhatikan:

    // Run a query for PHP
    if (!$process) {
    die(’Something went wrong - ‘.$client->getErrorCode().’ : ‘.$client->getErrorMessage());
    } else {
    echo “Hasil:\n”;
    print_r($client->getResponse());
    echo “”;
    }

    Artinya querynya gagal. Cek:
    1. Nama direktori untuk aplikasi di program saya adalah CherriServer


Tulis sebuah Komentar

*
*