search for in the  
<snmpwalkoidis_soap_fault>
Last updated: Thu, 19 May 2005

CXVII. SOAP Functions

Introduction

The SOAP extension can be used to write SOAP Servers and Clients. It supports subsets of SOAP 1.1, SOAP 1.2 and WSDL 1.1 specifications.

Requirements

This extension makes use of the GNOME xml library. Download and install this library. You will need at least libxml-2.5.4.

Installation

This extension is only available if PHP was configured with --enable-soap.

Runtime Configuration

The behaviour of these functions is affected by settings in php.ini.

Table 1. SOAP Configuration Options

NameDefaultChangeableChangelog
soap.wsdl_cache_enabled"1"PHP_INI_ALLAvailable since PHP 5.0.0.
soap.wsdl_cache_dir"/tmp"PHP_INI_ALLAvailable since PHP 5.0.0.
soap.wsdl_cache_ttl"86400"PHP_INI_ALLAvailable since PHP 5.0.0.
For further details and definitions of the PHP_INI_* constants, see the Appendix H.

Here's a short explanation of the configuration directives.

soap.wsdl_cache_enabled boolean

Enables or disables the WSDL caching feature.

soap.wsdl_cache_dir string

Sets the directory name where the SOAP extension will put cache files.

soap.wsdl_cache_ttl int

Sets the number of seconds (time to live) that cached files will be used instead the originals.

Predefined Classes

SoapClient

Constructor

Methods

SoapFault

Constructor

SoapHeader

SoapHeader is a special low-level class for passing or returning SOAP headers. It's just a data holder and it does not have any special methods except its constructor. It can be used in the SoapClient->__soapCall() method to pass a SOAP header or in a SOAP header handler to return the header in a SOAP response.

Constructor

SoapParam

SoapParam is a special low-level class for naming parameters and returning values in non-WSDL mode. It's just a data holder and it does not have any special methods except its constructor.

Constructor

SoapServer

Constructor

Methods

SoapVar

SoapVar is a special low-level class for encoding parameters and returning values in non-WSDL mode. It's just a data holder and does not have any special methods except the constructor. It's useful when you want to set the type property in SOAP request or response.

Constructor

Predefined Constants

The constants below are defined by this extension, and will only be available when the extension has either been compiled into PHP or dynamically loaded at runtime.

SOAP_1_1 (integer)

SOAP_1_2 (integer)

SOAP_PERSISTENCE_SESSION (integer)

SOAP_PERSISTENCE_REQUEST (integer)

SOAP_FUNCTIONS_ALL (integer)

SOAP_ENCODED (integer)

SOAP_LITERAL (integer)

SOAP_RPC (integer)

SOAP_DOCUMENT (integer)

SOAP_ACTOR_NEXT (integer)

SOAP_ACTOR_NONE (integer)

SOAP_ACTOR_UNLIMATERECEIVER (integer)

SOAP_COMPRESSION_ACCEPT (integer)

SOAP_COMPRESSION_GZIP (integer)

SOAP_COMPRESSION_DEFLATE (integer)

UNKNOWN_TYPE (integer)

XSD_STRING (integer)

XSD_BOOLEAN (integer)

XSD_DECIMAL (integer)

XSD_FLOAT (integer)

XSD_DOUBLE (integer)

XSD_DURATION (integer)

XSD_DATETIME (integer)

XSD_TIME (integer)

XSD_DATE (integer)

XSD_GYEARMONTH (integer)

XSD_GYEAR (integer)

XSD_GMONTHDAY (integer)

XSD_GDAY (integer)

XSD_GMONTH (integer)

XSD_HEXBINARY (integer)

XSD_BASE64BINARY (integer)

XSD_ANYURI (integer)

XSD_QNAME (integer)

XSD_NOTATION (integer)

XSD_NORMALIZEDSTRING (integer)

XSD_TOKEN (integer)

XSD_LANGUAGE (integer)

XSD_NMTOKEN (integer)

XSD_NAME (integer)

XSD_NCNAME (integer)

XSD_ID (integer)

XSD_IDREF (integer)

XSD_IDREFS (integer)

XSD_ENTITY (integer)

XSD_ENTITIES (integer)

XSD_INTEGER (integer)

XSD_NONPOSITIVEINTEGER (integer)

XSD_NEGATIVEINTEGER (integer)

XSD_LONG (integer)

XSD_INT (integer)

XSD_SHORT (integer)

XSD_BYTE (integer)

XSD_NONNEGATIVEINTEGER (integer)

XSD_UNSIGNEDLONG (integer)

XSD_UNSIGNEDINT (integer)

XSD_UNSIGNEDSHORT (integer)

XSD_UNSIGNEDBYTE (integer)

XSD_POSITIVEINTEGER (integer)

XSD_NMTOKENS (integer)

XSD_ANYTYPE (integer)

SOAP_ENC_OBJECT (integer)

SOAP_ENC_ARRAY (integer)

XSD_1999_TIMEINSTANT (integer)

XSD_NAMESPACE (string)

XSD_1999_NAMESPACE (string)

Table of Contents
is_soap_fault --  Checks if SOAP call was failed
SoapClient->__call() --  Calls a SOAP function (deprecated)
SoapClient->__construct() --  SoapClient constructor
SoapClient->__doRequest() --  Performs a SOAP request
SoapClient->__getFunctions() --  Returns list of SOAP functions
SoapClient->__getLastRequest() --  Returns last SOAP request
SoapClient->__getLastRequestHeaders() --  Returns last SOAP request headers
SoapClient->__getLastResponse() --  Returns last SOAP response.
SoapClient->__getLastResponseHeaders() --  Returns last SOAP response headers.
SoapClient->__getTypes() --  Returns list of SOAP types
SoapClient->__setCookie() --  Sets the cookie that will be sent with the SOAP request
SoapClient->__soapCall() --  Calls a SOAP function
SoapFault->__construct() --  SoapFault constructor
SoapHeader->__construct() --  SoapHeader constructor
SoapParam->__construct() --  SoapParam constructor
SoapServer->addFunction() --  Adds one or several functions those will handle SOAP requests
SoapServer->__construct() --  SoapServer constructor
SoapServer->fault() -- 
SoapServer->getFunctions() --  Returns list of defined functions
SoapServer->handle() --  Handles a SOAP request
SoapServer->setClass() --  Sets class which will handle SOAP requests
SoapServer->setPersistence() --  Sets persistence mode of SoapServer
SoapVar->__construct() --  SoapVar constructor
use_soap_error_handler -- 


User Contributed Notes
SOAP Functions
pash_ka
18-May-2005 02:52
One good tutorial on using this extension is on IBM web site:
"Using the PHP 5 SOAP extension to consume a WebSphere Web service"
http://www.ibm.com /developerworks/library/os-phpws/?ca=dgr-lnxw06PHP5soap
flobee at gmail dot com
11-May-2005 03:25
wow, actually a cool program and soap is new for me.
I found out some interessting things i can not debug because the scripts exit without any error messages or notes. :-(

you may have problems with the memory and/or especially on "shared servers" when server load is high.
sometimes the script does the job, sometimes it just stopping at any unknown point.
these are the steps my script does:
* get data from remote server ( ~ 4.5 MB)
* parsing requested object and store the data in a database.

the return with debug messages was intressting:
-> check Mem limit: 30M
-> $client = new new SoapClient($url_wsdl, $options);
-> Memory usage: 185888
-> $client->[requested_method_to_get_data]();
-> check: __getLastResponseHeaders() - after:
-> HTTP/1.1 200 OK // remote server is fine with me :-)
-> Content-Length: 4586742  // I got the data
-> check: Memory usage now: 23098872 // ups !!! this can't be true!!

so, and if now someone on the server takes the rest of RAM  the walk thought the data breaks :-(

so, i need to store the xml tree ($client->client->__last_response) and parsing it by the classical way. (if you would request more RAM, you may get in trouble with the admin if you run a script like this more often! (on shared servers)
06-May-2005 06:02
Very disappointed with the soap module, even after 4 releases of PHP5 its still not stable, I've tried a simple Google Adwords example (http://www.trachtenberg.com/blog/?p=8) on 3 different servers and each one has given a different response (only 1 worked correctly, all the others just reported "Internal Server Error").
OrionI
18-Apr-2005 10:12
If you're having problems calling a .NET web service, see the comments over on http://php.net/soap_soapclient_soapcall (the __soapCall method).
kucerar at hhmi dot org
25-Mar-2005 03:56
From that lists of tests in previous note,  I found an example that suggested removing the schema section altogether and writing in something like apache:Map for the type of the response message.  Just had the service return a nested array, and PHP handled everything and gave me something like an array of structs on the client end,  which is what I needed:

array(2) {
  [0]=>
  array(2) {
   ["url"]=>
   string(5) "hello"
   ["title"]=>
   string(5) "world"
  }
  [1]=>
  array(2) {
   ["url"]=>
   string(5) "world"
   ["title"]=>
   string(5) "hello"
  }
}

There ya go.
kucerar at hhmi dot org
25-Mar-2005 02:04
Here are 73 test cases that detail the kinds of schemas that PHP5 currently supports and the structures you are expected to plug into them for the return value from your services.  Much better than trying to guess!

http://cvs.php.net/co.php/pecl/soap/tests/schema

You can cycle through the listings by changing the main index in the URL below,  rather than go in and out of the pages

http://cvs.php.net/co.php/pecl/soap/tests/schema/schema052.phpt?r=1.2

I downloaded the whole thing with this,  CVS might work too.
http://www.httrack.com/

With them all downloaded I just browse them with Textpad.
Norman Clarke <norman at dontblink dot com>
21-Feb-2005 06:29
Note that if you should need to set the timeout for your soap request,  you can use ini_set to change the value for the default_socket_timeout. I previously used NuSOAP, whose soap client class has a timeout option, and it took me a while to figure out that PHP's soap uses the same socket options as everything else.
wokan at cox dot net
05-Feb-2005 07:06
It's not good security practice to pass the username and password in the URI when the point of SSL is to prevent that information from being intercepted.  Putting that information in the URI makes it interceptable.  HTTPS-Posted values are safe because values passed in the headers are sent after the SSL handshake has been completed.
martin AT kouba DOT at
25-Jan-2005 11:11
this is something i wrote to access a webservice with php4

http://kouba.at/projects/soap/
03-Dec-2004 09:06
here i found a good collection of tutorials all around soap/web services and/or rss:
http://www.dynamic-webpages.de/05.tutorials.php?kategorie=39
mikx at mikx dot de
29-Mar-2004 10:12
It took me a while to properly establish a password protected client connection via https on windows/apache1.3. Here my little guide:

1. The SOAP extension isn't activated by default (PHP5 RC1). Just add "extension=php_soap.dll" to the php.ini and don't forget to set the extension_dir properly (in most cases "c:\php\ext").

2. Add "extension=php_openssl.dll" to the php.ini. This module depends on libeay32.dll and ssleay32.dll - copy them from your php folder to your system32 folder.

3. Restart apache

4. The sourcecode

$client = new SoapClient("https://yourLogin:yourPassword@foo.com/bar.wsdl", array(
   "login"      => "yourLogin",
   "password"  => "yourPassword",
   "trace"      => 1,
   "exceptions" => 0));

$client->yourFunction();

print "<pre>\n";
print "Request: \n".htmlspecialchars($client->__getLastRequest()) ."\n";
print "Response: \n".htmlspecialchars($client->__getLastResponse())."\n";
print "</pre>";

Currently it seems to be necessary to add your login and password both in the uri and in the options array. Not sure if this is the expected behavior.

<snmpwalkoidis_soap_fault>
 Last updated: Thu, 19 May 2005
Copyright © 2001-2005 The PHP Group
All rights reserved.
This unofficial mirror is operated at: The Server Pages
Last updated: Thu May 19 17:35:34 2005 CDT