# Category Archives: php

## CodeIgniter and XMLRPC

### What are we going to do?

We’ll mimic what we already achieved in CodeIgniter and NuSOAP post using XMLRPC method.

So, we’ll create two endpoints, one is for getting a CD info (function name : getCdInfo) and the other is for getting all of CDs listed (function name : getCds).

We’ll still implement all of our function inside Welcome controller. The difference is that the registration process is placed inside index() function while the implementation is outside index() function but still within Welcome class.

### The Server

Here’s the configuration and registration process inside index() function:

Notice how I defined the endpoint name and register it. So, getCdInfo endpoint will be implemented in Welcome controller and getCdInfo function, while getCds endpoint will be implemented in Welcome controller as getCds function.
Now, here’s the implementation:

getCdInfo takes one parameter, so, we need to pass $request as getCdInfo function parameter while getCds function doesn’t take any parameter, so we omit it. Pay attention on getCds function, you’ll learn how I implement an XMLRPC endpoint that return an array of array (a data table). ### The Client Same as CodeIgniter and NuSOAP, for simplicity, we’ll implement the client as part of Welcome controller. Here’s the client code: getCdInfo call will output something like this: While getCds will return something like this: As you can see, the output of XMLRPC method is the same as NuSOAP method. No fixing needed! Here’s the complete source code of our controller: ## CodeIgniter and NuSOAP ### What are we going to do? We’ll use NuSOAP to create a webservice using CodeIgniter and consume it using CI also. In this tutorial, we’ll use “cds” table from “cdcol” database bundled from XAMPP. “cds” table content looks like this: cds table content Download NuSOAP here : https://sourceforge.net/projects/nusoap/ Extract “lib” folder from nusoap-0.9.5.zip into your CI “application/libraries/”. We’ll create simple library warper for NuSoap. Now, enter your CI “application/libraries/” folder and create a new file named “Nusoap_library.php”. Here’s the content: We’ll use default controller from CI, i.e. Welcome.php. We’ll create two webservice endpoints: one for getting info about a CD based in it’s “id” and one for getting all of CDs. All of webservice data types definition, registration and implmentation will be placed inside Wellcome controller’s “__construct()” function. Here’s the complete code for “__construct()” function: The first step is loading the library and configuring your webservice: We’ll define a new data type for our CD info based on “cds” table structure: Now, our complex type that will hold list of CDs (array of CDs). After finished defining all needed data types, we’ll register all needed webservice endpoint. First endpoint is “getCdInfo” to get info about a CD based on it’s “id”. It takes one parameter (“id”) and return a “Cd” type. Second endpoint is “getCds” to get all stored CD in the “cds” table. It takes no parameter and return an array of CDs. Registration is finished, now onto the implementation. Here’s the code: Pay attention, that I’m using “get_instance()” in order to query the database because we can’t call “$this” inside these endpoint functions.
Next, we’ll edit the default “index()” function, replace it with these:

You may try accessing your webservice from your browser and see how it looks

WSDL schema

webservice description

### Now, some fixing!

Before accessing our webservice via a SOAP client, we need to fix NuSoap library. Open “application/libraries/lib/nusoap.php”, go to line 6132 and comment that line so it would look like this:

If you didn’t do this fixing step, you’ll get a blank result when calling an endpoint that return an array of data. Further testing using SoapUI will reveal some error like this:

Fixing is done, now we’ll test it.
For simplicity reason, we’ll put our client inside our Welcome controller. Here’s the code:

As you can see, the code is quite simple, $res1 will contain output from “getCdInfo” endpoint and$res2 will contain an array of CDs as a result from calling “getCds”.

Here’s the complete source code of our controller, in case you missed something:

## Using linkbucks API / posting data using cURL in PHP

Background:

Solution:

• Register to linkbucks if you don’t have any account there (it’s free and you probably should use email other than gmail and hotmail if you want quick confirmation from linkbucks)

This is our little PHP function that help us to POST data to certain URL:

How to use it to call linkbucks API:

The curl_post function is quite generic, you can use it to send data to remote URL using POST method like this:

You should notice that the data array need to be converted using http_build_query first (in linkbucks’ case, it doesn’t need to be converted first).
You can also add more advanced feature in the function such as handling the timeout and cookie.

## Quite fast library for computing power of matrix using php

Still about Matrix, since lately I handle a lot of web-based projects that involving Matrix computations, maybe someday you’ll need this.
I’m in need of this kind of library when creating web-based ANP (Analytic Network Process) problem solver where you have to power the weighted supermatrix with some high integer number to gain the limit supermatrix.

Here’s the codes inside the library, you can save it to whatever php file:
http://pastebin.com/RmUXpBiT

(I’m sorry I don’t post the full source code on this post, WordPress always messed up the code because it contains ‘<‘ and ‘>’)

How to use it?
As simple as this:

Comparison to MATLAB
We’ll compare MATLAB result and our library result for the correctness and calculation speed.
The matrix will be taken from a CSV file and will be 15×15 in size. We will power this matrix to 512.
This is the MALTAB code used:

This is the partial screenshot of the MATLAB’s code result

power of matrix using MATLAB result

And finally our PHP code:
You can see it here: http://pastebin.com/x3hFi6tm
I won’t take the result screenshot as you can try it on http://demo.ahowto.net/matrix_power.php

If you run the MATLAB code and the PHP code, you’ll see that our PHP code yield the same result as the MATLAB code but it run much faster than the MATLAB (both already timed in miliseconds)! I absolutely don’t know why powering matrix using PHP is faster than using MATLAB but I’m happy with the result. 😀

## [Example] Solving math linear equations with 4 unknown variables

We’ll put some use of Matrix library for CodeIgniter that we already implemented to solve a linear equation.
Let’s say we have linear equations with 4 unknown variables like this:
$\begin{array}{rcl} 2a+3b+c+6d &=& 4 \\ 4a-2b+0.5c+d &=&2 \\ 6a+b-d&=&-1 \\ 2a+2b-c+3d&=&4 \end{array}$

That linear equation can be written in Matrix notation like this:
$\left[ \begin{matrix} 2&3&1&6\\ 4&-2&0.5&1 \\ 6&1&0&-1\\ 2&2&-1&3 \end{matrix} \right] \left[ \begin{matrix} a\\b\\c\\d \end{matrix} \right] = \left[ \begin{matrix} 4\\2\\-1\\4 \end{matrix} \right]$

And can be solved by this matrix equation:
$\left[ \begin{matrix} a\\b\\c\\d \end{matrix} \right] = \left[ \begin{matrix} 2&3&1&6\\ 4&-2&0.5&1 \\ 6&1&0&-1\\ 2&2&-1&3 \end{matrix} \right]^{-1} \left[ \begin{matrix} 4\\2\\-1\\4 \end{matrix} \right]$

And this is how we solve it on php/CodeIgniter:

Quite simple isn’t it?!

PS.: I’m glad I can use my Latex knowledge in this post 😛