os-php-webservice-a4

download os-php-webservice-a4

of 23

Transcript of os-php-webservice-a4

  • 8/8/2019 os-php-webservice-a4

    1/23

  • 8/8/2019 os-php-webservice-a4

    2/23

    System requirements

    The following tools are needed to follow along:

    Web serverAny operating system and any Web server can be used. Feel free to useApache V2.X, or IBM's HTTP Server; download from Apache or from IBM.

    PHPDue to the use of PHP data objects, PHP V5.1 or later is required. Be sure toconfigure with the following option to include support for Derby and the SOAPextensions: --with-pdo-odbc=ibm-db2,/home/db2inst1/sqllib--enable-soap. See Resources for information about configuring Apache orIBM's HTTP Server with PHP.

    DatabaseThis tutorial uses Apache Derby, which is open source and lightweight. Alsodownload the IBM DB2 JDBC Universal Driver and the DB2 Run-Time Client.Make sure to set your CLASSPATH appropriately by following the instructionson each page. You can follow the Linuxor Windowsinstructions forinstalling and downloading the DB2 Run-Time Client. See Resources for moreinformation to help you get the configuration right.IBM Cloudscape may also be used for this tutorial. The internals of it are thesame as Derby; however, the DB2 JDBC Universal Driver and other things arepackaged into Cloudscape, and it is supported by IBM. Download IBMCloudscape V10.1 and the DB2 Run-Time Client from IBM.

    Java technologyDerby requires Java technology. Download from Sun Microsystems or fromIBM.

    Section 2. Overview and setting up

    Web services have been a hit for some time now, and the popularity just keepsgrowing. But why? It's because they are the perfect way to integrate several entitiesinto one, allowing for better flow of information to management and to customers.

    PHP is definitely not behind in this area. Being one of the fastest-growing languages,PHP commands a host of developers that require this technology, too. Take a lookat the technology behind Web services, SOAP, and how databases like Derby helpenable a more powerful Web service.

    SOAP

    developerWorks ibm.com/developerWorks

    Build a Web service with PHPPage 2 of 23 Copyright IBM Corporation 1994, 2007. All rights reserved.

    http://httpd.apache.org/download.cgihttp://www14.software.ibm.com/webapp/download/product.jsp?s=p&id=RBAR-5LER2Thttp://www.php.net/downloads.phphttp://db.apache.org/derby/http://www.ibm.com/developerworks/db2/downloads/jcc/http://www.ibm.com/developerworks/db2/library/techarticle/dm-0409cline2/http://www.ibm.com/developerworks/db2/library/techarticle/dm-0409cline2/readme_linux.txthttp://www.ibm.com/developerworks/db2/library/techarticle/dm-0409cline2/readme_win.txthttp://www.ibm.com/developerworks/db2/library/techarticle/dm-0408cline/http://www.ibm.com/developerworks/db2/library/techarticle/dm-0408cline/http://www.ibm.com/developerworks/db2/library/techarticle/dm-0409cline2/http://java.sun.com/j2se/downloads/http://www.ibm.com/developerworks/java/jdk/http://www.ibm.com/legal/copytrade.shtmlhttp://www.ibm.com/legal/copytrade.shtmlhttp://www.ibm.com/developerworks/java/jdk/http://java.sun.com/j2se/downloads/http://www.ibm.com/developerworks/db2/library/techarticle/dm-0409cline2/http://www.ibm.com/developerworks/db2/library/techarticle/dm-0408cline/http://www.ibm.com/developerworks/db2/library/techarticle/dm-0408cline/http://www.ibm.com/developerworks/db2/library/techarticle/dm-0409cline2/readme_win.txthttp://www.ibm.com/developerworks/db2/library/techarticle/dm-0409cline2/readme_linux.txthttp://www.ibm.com/developerworks/db2/library/techarticle/dm-0409cline2/http://www.ibm.com/developerworks/db2/downloads/jcc/http://db.apache.org/derby/http://www.php.net/downloads.phphttp://www14.software.ibm.com/webapp/download/product.jsp?s=p&id=RBAR-5LER2Thttp://httpd.apache.org/download.cgi
  • 8/8/2019 os-php-webservice-a4

    3/23

    What does SOAP mean? It stands for Simple Object Access Protocol, and it'sessentially a standard for exchanging XML-based data via HTTP. In other words: It'sthe signal that goes down the telephone lines if you were talking with your friend onthe phone, but instead of you and your friend talking on the phone, it'll be carcustomers searching for the vehicles of their dreams in a chain of car dealerships.

    An example of a SOAP message is shown in Listing 1.

    Listing 1. A SOAP message

    SOAP-ENV:ServerBad Request. Can't find

    HTTP_RAW_POST_DATA

    While you'll see this again later, it's shown here so you can get a feel for thetechnology. The body of most SOAP messages has data, similar to the fault shownhere. Sometimes a header is used to hold encryption and other context-sensitivedata for the SOAP construct being sent. Also, SOAP messages are sent as raw XMLdata.

    How databases fit in

    A Web service can hardly be useful without a database. You can use a database tostore information about what a particular user queried or looked at during a visit.Most existing systems of large companies have a vast array of databases andinformation, making the use of databases vital for a successful Web service -- evenfor established Web sites.

    Site information is almost always stored in a database, and accessing suchinformation via a Web service is just as important. So learning how to integrate yourPHP Web service with a database is vital, just as it is with the basic PHP setup. PHPdevelopment just isn't PHP development without a database ready at your beck andcall.

    The example dealership application in PHP

    In this tutorial, you'll take advantage of all the above for your Web service, enablingyou to get a jumpstart into your own PHP Web service development. The applicationyou're going to build has a user interface where users can enter queries, as shownbelow.

    Figure 1. Searching for the vehicle of your dreams

    ibm.com/developerWorks developerWorks

    Build a Web service with PHP Copyright IBM Corporation 1994, 2007. All rights reserved. Page 3 of 23

    http://www.ibm.com/legal/copytrade.shtmlhttp://www.ibm.com/legal/copytrade.shtml
  • 8/8/2019 os-php-webservice-a4

    4/23

    Section 3. Simple SOAP server in PHP

    You'll create a simple SOAP server to learn to use basic PHP SOAP servercapabilities. This section will give you a taste of and prepare you for the rest of thetutorial.

    Creating a server

    A simple server takes a SOAP request and returns a response. Create a simpleecho application that takes in a string and sends it back with the word ECHO tackedonto the front. Create a file called simple_server.php, and define it as shown below.

    Listing 2. A simple SOAP server

  • 8/8/2019 os-php-webservice-a4

    5/23

    $server = new SoapServer(null,array('uri' =>

    "urn://tyler/res"));$server->addFunction('echoo');$server->handle();

    ?>

    The first item is the echoo function. It returns the string passed to it and appendsECHO: to the front of it. Also, see how the SoapServer object is created in PHP.Then add the echoo function to the list of functions that the SOAP server supports.You have to call the function echoo because echo is a reserved word in PHP,similar to the print command. The last line calls the handle method of theSoapServer object, allowing the server to handle the SOAP request and return aresponse, as defined in the echoo method.

    SOAP messagesPointing a browser to your SOAP server in its current status causes a fault becauseof the way the request is sent. The data needs to be sent as raw POST data viaHTTP, as described by the faultstring.

    Listing 3. Pointing a browser to the SOAP server

    SOAP-ENV:Server

    Bad Request. Can't findHTTP_RAW_POST_DATA

    Your server is now live, but you can only access it via a SOAP client or you'll getfault errors, as shown above. Now that you know the SOAP server is working, youcan move onto creating a simple client.

    Creating a client: Echo form

    A client allows you to send data to the SOAP server using the correct expectedprotocol. Since all you need is any string to send to the SOAP server to test it out,you'll create a simple form with one text box and a button. Create a file calledsimple_client.php and define it, as shown below.

    Listing 4. Creating a simple form

  • 8/8/2019 os-php-webservice-a4

    6/23

    print "Echo Web Service";print "";print "
    ";print "";print "";...

    Because of the function of the application, the method by which you'll send requeststo the SOAP server will be via GET. If the function had side-effects, like databasemodification or logging in, you'd want to use POST.

    The code first retrieves the value of input from the GET array or URL. Next, the formis created, with the action field being this same PHP script, simple_client.php, soGET requests from this form get sent to this same PHP script. Notice that there aretwo input tags: the text box where you'll type the value to have returned from theSOAP server and the GO button. A preview of the form is shown below.

    Figure 2. The Echo form

    Creating a client: Making the request

    Once the button is clicked, the text in the text box, shown above, gets sent to thePHP script in the URL, which you can extract in the GET array. This allows you toverify that a request was sent and process it. Continue defining thesimple_client.php file, as shown below.

    Listing 5. Handling requests and sending them to the SOAP server

    ...print "";

    if($echo != ''){

    developerWorks ibm.com/developerWorks

    Build a Web service with PHPPage 6 of 23 Copyright IBM Corporation 1994, 2007. All rights reserved.

    http://www.ibm.com/legal/copytrade.shtmlhttp://www.ibm.com/legal/copytrade.shtml
  • 8/8/2019 os-php-webservice-a4

    7/23

  • 8/8/2019 os-php-webservice-a4

    8/23

    Creating the database

    Since PHP connects to Derby using the network server and ODBC, start the serverby typing:

    javaorg.apache.derby.drda.NetworkServerControlstart

    When the application starts, it's ready to accept connections. Connect to and createa new database using the Derby ij tool:

    java org.apache.derby.tools.ij

    You should now be at the ij prompt, where you can enter database commands.The ij tool allows you to create and connect to databases, as well as query them asyou would in PHP. This helps you fine-tune and perfect your search queries beforeimplementing them in your PHP application. Now you'll create and connect to thedatabase:

    connect'jdbc:derby:net://localhost:1527/DEALER;create=true:

    user=dealer;password=dealer;';

    Here, you've created the DEALER database with user and password being dealer.

    Next, you'll catalog the database in DB2 so the PHP ODBC drivers will see our newdatabase and be able to connect to it.

    Cataloging the database in DB2

    Start the DB2 client: In Linux, type db2 at the command line; in Windows, click onthe Command Line Processor application installed under Programs > IBM DB2 >Command Line Tools. When you have the DB2 prompt up, type the following:

    catalog tcpip node cns remote localhost server 1527

    This creates a node you'll catalog the database to:

    catalog db DEALER at node cns authentication server

    Our DEALER database is now associated with the cns node. Next, catalog theDEALER database as a system ODBC data source so the PHP ODBC drivers willfind and recognize the DEALER database:

    developerWorks ibm.com/developerWorks

    Build a Web service with PHPPage 8 of 23 Copyright IBM Corporation 1994, 2007. All rights reserved.

    http://www.ibm.com/legal/copytrade.shtmlhttp://www.ibm.com/legal/copytrade.shtml
  • 8/8/2019 os-php-webservice-a4

    9/23

    catalog system odbc data source DEALER

    The DEALER database is ready to go! You could connect to it in PHP, but beforeyou do, learn more about its purpose and initialize it with tables.

    The DEALER database

    This database holds three tables -- one for each physical dealership location. Eachlocation will have its own table in the database with vehicle data. And when queriesfrom the SOAP client come to the SOAP server, each SOAP server will query itsown database table and return the results for it. The three tables:

    vehicles_steinbach

    vehicles_pinefalls vehicles_selkirk

    Each table contains the vehicles for each of three cities, which you'll create next.

    Creating the vehicle tables for each location

    Create each of the three tables for the dealership application using the ij tool.Create them using the SQL commands at the ij prompt, as shown below.

    Listing 6. Create the three tables

    drop table vehicles_steinbach;create table vehicles_steinbach (make varchar(50),

    model varchar(50),yyear varchar(4),price integer,feature_desc varchar(512));

    drop table vehicles_pinefalls;create table vehicles_pinefalls (make varchar(50),

    model varchar(50),yyear varchar(4),price integer,feature_desc varchar(512));

    drop table vehicles_selkirk;create table vehicles_selkirk (make varchar(50),

    model varchar(50),yyear varchar(4),price integer,feature_desc varchar(512));

    Each table has a make, model, yyear, price, and feature_desc describing avehicle's features.

    The database skeleton is complete with the creation of these tables. Now let's fill inthe guts by adding some content to the database.

    ibm.com/developerWorks developerWorks

    Build a Web service with PHP Copyright IBM Corporation 1994, 2007. All rights reserved. Page 9 of 23

    http://www.ibm.com/legal/copytrade.shtmlhttp://www.ibm.com/legal/copytrade.shtml
  • 8/8/2019 os-php-webservice-a4

    10/23

    Initializing each table with vehicle information

    Most dealerships -- even chains -- customize each dealership to a certain make, etc.You'll see this in the choices for the contents of each table. Use the following SQL,

    shown below, or create content of your own as the content of the database.

    Listing 7. Filling in the three tables with content

    insert into vehicles_steinbach values('Chrysler', 'Crossfire', '2005', 19999,

    'Air conditioning, power windows'),('Chrysler', 'Sebring', '2003', 14999, 'Convertible'),('Dodge', 'Viper', '2006', 89999, 'loaded'),('Chrysler', '300', '2003', 18999, 'Leather seats'),('Dodge', 'Durango', '2004', 23999, 'Supercharged engine');

    insert into vehicles_pinefalls values('Toyota', 'Camry', '2001', 13999, 'Power steering'),

    ('Toyota', 'Tacoma', '2002', 16999, 'Power seats'),('Lexus', 'LS', '2003', 26999, 'Built in GPS'),('Toyota', 'Prius', '2004', 29999, 'Built in TV and DVD player'),('Lexus', 'GS', '2005', 34999, '10 CD changer');

    insert into vehicles_selkirk values('Saturn', 'Vue', '2004', 15999, 'Power locks'),('Saturn', 'Ion', '2005', 12499, 'Reliable'),('Saturn', 'Sky', '2006', 19999, 'Convertible, must see!'),('Saturn', 'Relay', '2004', 14999, 'Very roomy'),('Saturn', 'L300', '2001', 9999, 'Chrome wheels');

    Your database is finished and ready to be queried by your PHP application, whichyou'll begin architecting next.

    Section 5. Architecting the user interface

    With the database ready to go, you can begin work on the PHP application. By theend of this section, your application will have a user interface complete with a formthat takes in the make, model, and year of the vehicle being searched for.

    The header

    When a page is requested, the header appears at the top of the page, and placingthose contents in a separate PHP script makes your code modular and easier toread because you can simply include the header file at the top of a new scriptwithout it cluttering the file. Create a header.php file and define it, as shown below.

    Listing 8. Creating a header file

  • 8/8/2019 os-php-webservice-a4

    11/23

    define(COMPANY_NAME, 'SOAP Serverz R Us');

    print(''.COMPANY_NAME.'');

    print('Welcome to'.COMPANY_NAME.'');

    print('');?>

    This sets up the HTML for the page, as well as a structure defined by the tag and displays a greeting to visiting users. It ends by opening up a tag.

    The footer

    The concept of a footer file is similar to the concept of a header file. With the headerand footer file together, you essentially no longer have to write basic HTML tags (like) ever again. This allows you to focus on what you do best: PHPdevelopment. Create a file called footer.php and define it, as shown below.

    Listing 9. Creating a footer file


    Copyright 2006,

    This file closes off the and tags from the header, anddisplays a little copyright saying you don't want your information copied. A preview of

    the current application, as shown in a browser, can be previewed in Figure 4.

    Figure 4. The application with a header and footer

    ibm.com/developerWorks developerWorks

    Build a Web service with PHP Copyright IBM Corporation 1994, 2007. All rights reserved. Page 11 of 23

    http://www.ibm.com/legal/copytrade.shtmlhttp://www.ibm.com/legal/copytrade.shtml
  • 8/8/2019 os-php-webservice-a4

    12/23

    Looking up vehicles with a formWith the header and footer created, you can focus on the main content of the userinterface for your application. Create a file called index.php and define it, as shownbelow.

    Listing 10. Creating the form used to search for vehicles

  • 8/8/2019 os-php-webservice-a4

    13/23

    the form should send the data to this same index.php script. The first three lines ofthe script retrieve the data from the URL or GET array, which you'll process next.Before you go there, however, you can preview the form.

    Figure 5. Searching for vehicles

    Processing the form and calling the clientOnce a request has been made by a car customer, your code needs to handle thatrequest and call client code to request responses from each of the three SOAPservers. Do so by completing the index.php file, as shown below.

    Listing 11. Handling requests from the user interface

    print "";print "";

    if($_GET['submit'] === 'GO' &&

    ($make != '' || $model != '' || $year != '')){ print "Search Results:";require('client.php');

    }

    require('footer.php');?>

    You'll know that the request has been made by a car customer if the GET array'ssubmit value equals GO. Now if the button got clicked and any one or more of thetext boxes was filled in, initialize a request to the SOAP servers via the client code,which you'll define in the next section.

    ibm.com/developerWorks developerWorks

    Build a Web service with PHP Copyright IBM Corporation 1994, 2007. All rights reserved. Page 13 of 23

    http://www.ibm.com/legal/copytrade.shtmlhttp://www.ibm.com/legal/copytrade.shtml
  • 8/8/2019 os-php-webservice-a4

    14/23

    Now you'll create a simple Web server for each of the three locations, in preparationto test the client code you'll develop in the next section.

    Simple Web services for each location

    Start with a simplified version of the Web service and build on it later. Create threefiles: server_steinbach.php, server_pinefalls.php, and server_selkirk.php, and defineeach of them, as shown below.

    Listing 12. Creating the three SOAP servers

    Notice that the vehicleLookup method is what the client code will call in passingthe vehicle search query to the SOAP servers.

    Great! Your application framework is ready for the client code.

    Section 6. The client

    Client code is usually referred to as code that creates a client capable ofcommunicating with a server, sends a request, and receives a response. That's whatyou'll develop in this section: code that creates clients to communicate with each ofthe three dealership locations.

    Initializing a client for each location

    The first step in sending requests to the SOAP servers is creating three clients withtheir locations set to point to each of the three URLs of the three SOAP servers.Create a file called client.php and define it, as shown below.

    Listing 13. Create three SOAP clients

  • 8/8/2019 os-php-webservice-a4

    15/23

    array('location' =>

    "http://localhost/soap/server_steinbach.php",'uri' => "urn://tyler/req"));

    $client_pinefalls = new SoapClient(null,array(

    'location' =>"http://localhost/soap/server_pinefalls.php",

    'uri' => "urn://tyler/req"));

    $client_selkirk = new SoapClient(null,array(

    'location' =>"http://localhost/soap/server_selkirk.php",

    'uri' => "urn://tyler/req));...

    Here, each of the three SOAP clients are created with each pointing to one of thethree locations for each of the three dealership cities.

    Looking up vehicles from each SOAP server

    With the three clients created, you can now call the SOAP server's vehicleLookupmethods and start returning results! Continue defining the client.php file, as shownbelow.

    Listing 14. Retrieving responses from each SOAP server

    ...'uri' => "urn://tyler/req"));

    $result_steinbach = $client_steinbach->__soapCall("vehicleLookup",array($make,$model,$year));

    $result_pinefalls = $client_pinefalls->__soapCall("vehicleLookup",array($make,$model,$year));

    $result_selkirk = $client_selkirk->__soapCall("vehicleLookup",array($make,$model,$year));

    ...

    Notice how each response for each call to each client's __soapCall is stored. The__soapCall method accepts two parameters you're interested in. The first is thename of the method in the SOAP server you're calling and the other is the array ofparameters you're passing.

    Displaying results

    Now that you've got results, you can display them. Finish defining the client.php file,as shown below.

    Listing 15. Displaying search results to the car customer

    ...$result_selkirk = $client_selkirk->

    ibm.com/developerWorks developerWorks

    Build a Web service with PHP Copyright IBM Corporation 1994, 2007. All rights reserved. Page 15 of 23

    http://www.ibm.com/legal/copytrade.shtmlhttp://www.ibm.com/legal/copytrade.shtml
  • 8/8/2019 os-php-webservice-a4

    16/23

    __soapCall("vehicleLookup",array($make,$model,$year));

    if($result_steinbach != '' ||$result_pinefalls != '' ||$result_selkirk != ''){

    print "";print

    "MakeModel";

    print "Year";print

    "PriceDescription";

    print $result_steinbach;print $result_pinefalls; print $result_selkirk; print "";

    }?>

    If one of the three dealerships (SOAP servers) returns results, display the table, withthe results from each of the three dealerships as rows. Preview current resultsbelow.

    Figure 6. Search results

    When you finish defining the server in the next section, the output will display

    developerWorks ibm.com/developerWorks

    Build a Web service with PHPPage 16 of 23 Copyright IBM Corporation 1994, 2007. All rights reserved.

    http://www.ibm.com/legal/copytrade.shtmlhttp://www.ibm.com/legal/copytrade.shtml
  • 8/8/2019 os-php-webservice-a4

    17/23

    results, rather than just echo.

    Section 7. The server

    Now you'll develop the SOAP server. The three SOAP servers get called by theclient code, and each of them returns results, as found in their own local databases.In this section, you'll develop the server by connecting to and querying the Derbydatabase, and returning formatted results.

    Connecting to Derby

    Before the database can be queried, you need to connect to it in PHP. Define ahandy db_connect function in all three sever files, as shown below.

    Listing 16. Connecting to the DEALER database

  • 8/8/2019 os-php-webservice-a4

    18/23

    if($make != '')$queryMake = "make='$make'";

    $query = $queryMake;

    if($model != '')$queryModel = "model = '$model'";

    if($query != '' && $queryModel != '')

    $query .= " and $queryModel";else if($queryModel != '')$query = $queryModel;

    if($year != '')$queryYear = " yyear = '$year' ";

    if($query != '' && $queryYear != '')$query .= " and $queryYear";

    else if($queryYear != '')$query = $queryYear;

    $sql = "select * from ".TABLE." where $query";...

    First you retrieve the PHP data object from connecting to the database. Then you

    check each of the three parameters to see if they have contents (meaning that theyare not equal to the null string). If they do, append them to the $query string, whichyou'll use in the where clause of the SQL statement. The code needed for $make iseasy and gets slightly more complex with $model and $year. For the latter twocases, if $query and the parameter aren't empty, append them to the where clausewith and as the suffix. Otherwise, if the parameter isn't empty, set it to $query, anddo nothing if both $query and the parameter are empty. Finally, create the SQLstatement by selecting from the table, inserting $query as the value for the whereclause.

    Querying the database and formatting resultsNow that the SQL statement is prepared and ready for use in querying the database,you'll query the database, as shown below.

    Listing 18. Querying the database and formatting results

    ...$sql = "select * from ".TABLE." where $query";

    $ret = '';foreach($pdo->query($sql) as $row){

    $make = $row['MAKE'];$model = $row['MODEL'];$year = $row['YYEAR'];$price = $row['PRICE'];$desc = $row['FEATURE_DESC'];$ret .= "$make";$ret .= "$model";$ret .= "$year";$ret .= "$price";$ret .= "$desc";

    }return $ret;

    }

    Set up the return parameter, $ret, by setting it to the null string, or ''. Then query

    developerWorks ibm.com/developerWorks

    Build a Web service with PHPPage 18 of 23 Copyright IBM Corporation 1994, 2007. All rights reserved.

    http://www.ibm.com/legal/copytrade.shtmlhttp://www.ibm.com/legal/copytrade.shtml
  • 8/8/2019 os-php-webservice-a4

    19/23

    the database in the foreach statement and loop through each of the results, whichget stored in $row with each iteration of the loop. The next five statements retrievethe make, model, yyear, price, and description information from thedatabase. The next five statements format these results in a row using HTML. Thelast statement returns the results to the client, which displays them.

    Customizing for each location

    Did you notice the use of the TABLE defined in Listing 17? This is what makes eachserver different from one another as each one queries a different table in thedatabase. Finish off each of the server files by adding the code, as shown below.

    Listing 19. Defining the TABLE

  • 8/8/2019 os-php-webservice-a4

    20/23

    Excellent! The application's complete, and you're now a PHP SOAP server guru.

    Section 8. Summary

    You've developed a SOAP server in PHP. Now you can do what Amazon andGoogle do with Web services by building integrated Web applications with Web

    services in the infamous PHP programming language. To top it off, you've integratedyour Web service with the lightweight capabilities of the Derby database for dataquery and storage.

    developerWorks ibm.com/developerWorks

    Build a Web service with PHPPage 20 of 23 Copyright IBM Corporation 1994, 2007. All rights reserved.

    http://www.ibm.com/legal/copytrade.shtmlhttp://www.ibm.com/legal/copytrade.shtml
  • 8/8/2019 os-php-webservice-a4

    21/23

    Downloads

    Description Name Size Download method

    Source code os-php-webservice.source.zip5KB HTTP

    Information about download methods

    ibm.com/developerWorks developerWorks

    Build a Web service with PHP Copyright IBM Corporation 1994, 2007. All rights reserved. Page 21 of 23

    http://download.boulder.ibm.com/ibmdl/pub/software/dw/opensource/os-php-webservice.source.ziphttp://www.ibm.com/developerworks/library/whichmethod.htmlhttp://www.ibm.com/legal/copytrade.shtmlhttp://www.ibm.com/legal/copytrade.shtmlhttp://www.ibm.com/developerworks/library/whichmethod.htmlhttp://download.boulder.ibm.com/ibmdl/pub/software/dw/opensource/os-php-webservice.source.zip
  • 8/8/2019 os-php-webservice-a4

    22/23

  • 8/8/2019 os-php-webservice-a4

    23/23

    degree in computer engineering in 2005, also from Brigham Young University. He iscurrently an engineer for Stexar Corp., based in Beaverton, Ore.

    ibm.com/developerWorks developerWorks

    Build a Web service with PHP Copyright IBM Corporation 1994, 2007. All rights reserved. Page 23 of 23

    http://www.ibm.com/legal/copytrade.shtmlhttp://www.ibm.com/legal/copytrade.shtml