- Details
- Written by: Stanko Milosev
- Category: PHP
- Hits: 6672
Here are my expirience in working with NuSoap (SOAP) in PHP.
Creating simple SOAP function is simple,ĂÂ so there is no need to explain.
Problems are coming when you need a complex types, like array, and UTF-8 encoding.
Here is an example of adding complex type to your SOAP server:
$server->wsdl->addComplexType(
'Chapter', //name
'complexType', //typeClass (complexType|simpleType|attribut)
'struct', //phpType: currently supported are array and struct (php assoc array)
'all', //compositor (all|sequence|choice)
'', //restrictionBase namespace:name (http://schemas.xmlsoap.org/soap/encoding/:Array)
array( //elements = array ( name = array(name=>ââŹĹĽ,type=>ââŹĹĽ) )
'title' => array('name'=>'title','type'=>'xsd:string'),
'page' => array('name'=>'page','type'=>'xsd:int')
) );
$server->wsdl->addComplexType(
'ChapterArray',
'complexType',
'array',
'',
'SOAP-ENC:Array',
array(),
array(
array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:Chapter[]')
),
'tns:Chapter' );
$server->wsdl->addComplexType(
'Book',
'complexType',
'struct',
'all',
'',
array(
'author' => array('name'=>'author','type'=>'xsd:string'),
'title' => array('name'=>'title','type'=>'xsd:string'),
'numpages' => array('name'=>'numpages','type'=>'xsd:int'),
'toc' => array('name'=>'toc','type'=>'tns:ChapterArray')
) );
$server->register(
'getBook', // method name
array('title'=>'xsd:string'), // input parameters
array('return'=>'tns:Book'), // output parameters
$NAMESPACE); // namespace
function getBook($title) {
// Create TOC
$toc = array();
$toc[] = array('title' => 'Chapter One', 'page' => 1);
$toc[] = array('title' => 'Chapter Two', 'page' => 30);
// Create book
$book = array(
'author' => "Jack London",
'title' => $title,
'numpages' => 42,
'toc' => $toc);
return $book;
}
Taken from here.
Comments are taken from here.
Client example:
<?php
require_once('nusoap.php');
$namep = "Title";
$param = array('String_1' => $namep);
$endpoint = "http://localhost/server.php";
$mynamespace = "http://localhost/server.php";
$client = new soapclient($endpoint);
$client->decodeUTF8 = true;
$response = $client->call('getBook', $param, $mynamespace);
print_r ($response['author']);
echo '<p/>'.$client->response;
?>
Now, if you want to use utf - 8, you will have to in nusoap.php on line 152, instead of:
var $soap_defencoding = 'ISO-8859-1';
Add or uncomment:
var $soap_defencoding = 'UTF-8';
Also, on server side I added:
$server->decode_utf8ĂÂ =ĂÂ true;ĂÂ
If you are using MySQL and data are encoded in Windows-1252 (like mine) then you will need to put:
mysql_query('set names utf8');
InĂÂ your server side.
I hope that is all.
- Details
- Written by: Stanko Milosev
- Category: PHP
- Hits: 4588
If you are receiving error "The specified module could not be found." then try to instead of "C:Program FilesPHPphp5isapi.dll" write C:Progra~1PHPphp5isapi.dll (without quotes) in Web Sites node, and in Default Web Site node, or any other. Right -> Properties -> Home Directory -> Cofiguration, find .php and click edit.
Also,extension are now in C:Program FilesPHPext, so if you are using MS SQL PHP extension for MS SQL then you will need manually to copy files php_sqlsrv_ts.dll and php_sqlsrv.dll to that folder.
ĂÂ Taken from my brain :P
- Details
- Written by: Stanko Milosev
- Category: PHP
- Hits: 4646
Whenever is possible use parameterized queries in MS driver for PHP for MS SQL, to reduce risko of SQL injection attack.Taken from here.
Using of parametrized queries is simple, you can use example from here, for varchar types everything is same (you don't need quotes, as I thought) .