Web студия "GrandView"
  Главная   Написать Контакты
   
   
О проекте
Руководство php
 

CL. SOAP Functions

Введение

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.

Требования

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

Установка

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

Настройка во время выполнения

Поведение этих функций зависит от установок в php.ini.

Таблица 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.
Для подробного описания констант PHP_INI_*, обратитесь к документации функции ini_set().

Краткое разъяснение конфигурационных директив.

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.

Предопределенные классы

SoapClient

Конструктор

Методы

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.

Конструктор

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.

Конструктор

SoapServer

Конструктор

Методы

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.

Конструктор

Предопределенные константы

Перечисленные ниже константы определены данным расширением и могут быть доступны только в том случае, если PHP был собран с поддержкой этого расширения или же в том случае, если данное расширение подгружается во время выполнения.

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_ANYXML (integer)

Added in PHP 5.1.0.

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)

Содержание
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() -- Issue SoapServer fault indicating an error
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 -- Set whether to use the SOAP error handler and return the former value


is_soap_fault> <snmpwalkoid
Last updated: Fri, 26 Jan 2007
 
add a note add a note User Contributed Notes
SOAP Functions
dirk at waferthin dot com
20-Jun-2007 04:31
I hope this will save someone time. When developing and testing your SOAP server, remember to disable WSDL caching in BOTH client and server:

$ini = ini_set("soap.wsdl_cache_enabled", 0);
jochen dot munz at municons dot com
11-Jun-2007 08:56
When encountering an error message like this

[faultstring] => Function ("yourMethod") is not a valid method for this service

although it is present in the WSDL etc., be aware that PHP caches the wsdl locally for better performance. You can disable the caching via php.ini/.htaccess completely or remove the cache file (/tmp/wsdl-.. if you are on Linux) to force regeneration of it.
Marcio Annunciato
17-May-2007 02:22
In case your soap response containts an ampersand, in certain cases you might get an "unterminated entity reference" warning and data might appear truncated (related to bug #36795?). Maybe there is a more formal fix or setting, but since I couldn't find anything I came with the following:

class MySoapClient extends SoapClient {
    function __doRequest($request, $location, $action, $version) {
        $res = parent::__doRequest($request, $location, $action, $version);
        $resx = str_replace('&amp;', '&amp;amp;', $res);
        print_r($resx);
        return ($resx);
    }
}
albert at jool dot nl
27-Mar-2007 03:59
A note for ppl who use certificates with SOAP under a Windows config: it seems to be required to give the full path to the certificate file - and don't prepend 'file://' :

<?php

$wsdl
= "test.wsdl";
$local_cert = "c:\htdocs\mycert.pem";
$passphrase = "xyz";

$client = new SoapClient($wsdl, array('local_cert' => $local_cert, 'passphrase' => $passphrase);

?>
kroesjnov at hotmail dot com
09-Feb-2007 07:38
If you dont want to manually maintain the classmap, make sure you use the same names for your PHP object classes and your WSDL complexTypes, and use the following code:

$classmap = array();
$tmpClient = new SoapClient("soapserver.wsdl");
   
foreach($tmpClient->__getTypes() as $type)
{
    $array = split(" ", $type);
    if($array[0] == "struct" && class_exists($array[1]))
    {
        $classmap[$array[1]] = $array[1];
    }
}
unset($tmpClient);
   
$server = new SoapServer("soapserver.wsdl", array("classmap" => $classmap));
unset($classmap);
$server->setClass("someclass");
$server->handle();
Herman Hiddema
07-Feb-2007 06:32
I recently found that when using SoapClient with client certificates (the 'local_cert' and 'passphrase' options), PHP needs to have CURL enabled. (At least with PHP 5 and Apache on Windows)

I kept getting errors like this:
Unable to set local cert chain file `filename.pem'; Check that your cafile/capath settings include details of your certificate and its issuer in somescript.php on line ##

I tried everything I could find on the net (correct .pem format, constructing and passing my own stream context, etc) but nothing would work. Enabling CURL (by uncommenting extension=php_curl.dll in php.ini) instantly caused my client to work.
brephophagist
18-Jan-2007 09:45
For those working from a wsdl full of complex types that just want a class structure to hang your code on and not worry about typing in long parameter lists (or creating a script to do so): wsdl2php is a wonderful time-saver. Gets a structure going so you can go in and add what validation and special data munging you need: http://www.urdalen.no/wsdl2php/

Big up yourself, Knut.
Olaf Krische
21-Nov-2006 01:48
If you use SSL with a cert and password authentication:

$wsdl = "https://ws.ecopatz.de/ProductInfo?wsdl";
$pass = 'a password';
$certFile = "./mycert.pem";

  $client = new SoapClient($wsdl,
    array(
     'local_cert' => $certFile,
     'passphrase' => $pass
    )
  );

If you have problems with the certfile like this:

  Warning: SoapClient::__construct(): Unable to set local cert chain file `./mycert.pem'; Check that your cafile/capath settings include details of your certificate and its issuer in productinfo.php on line 27

then the certFile is probably in the "wrong format" (the wrong format for php maybe). It worked for me, when i appended the content of the private key file and the certificate file to a single file "mycert.pem":

  cat mycert.key >mycert.pem # mycert.key was the private key
  cat mycert.crt >>mycert.pem # mycert.crt was the signed certificate

Thanks to an author somewhere, who pointed to "curl --cert", where this little "so unimportant" dependency has been mentioned.
Ger
Новости
11 июля 2007
Сайт запущен
© 2007 info@grandviewstudio.com
Z058440144362 Z348613067571