Two notes about the steam_context option:
1- In the example of the documentation, it says:
<?php
$client = new SoapClient("some.wsdl", ['context' => $context]);
?>
This is wrong. As it is stated in the parameters list, it must be "stream_context" and NOT "context".
2- The HTTP Context manual here: https://www.php.net/manual/en/context.http.php
It says header can either be of type array or string. This is also wrong. It may not necessarily be optional because it might depend on your PHP compile time configuration.
If your instance is compiled --with-curlwrappers option, you should use array type for header in the HTTP context and if not; you should use a string separated by new line (\n) for the header. I am not sure if SoapClient respects curl_wrappers option because although it is enabled in my instance and although I am using arrays for the headers to create HTTP context for non-Soap operations; SoapClient required me to use a string. It otherwise just dropped the stream_context altogether.
So with SoapClient, you better use a string for the HTTP header like:
<?php
$context = stream_context_create(array(
'http' => array(
'user_agent' => 'My App',
'header' =>
"Custom-Header: Value\n" .
"Another Header: Surprise"
)
));
$client = new SoapClient('some.wsdl', ['stream_context' => $context]);
?>SoapClient::__construct
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
SoapClient::__construct
Референца за `soapclient.construct.php` со подобрена типографија и навигација.
SoapClient::__construct
класата mysqli_driver
SoapClient::__construct — Конструктор на SoapClient
= NULL
Креира SoapClient објект за поврзување со SOAP услуга.
Параметри
wsdl-
URI на WSDL датотека што ја опишува услугата, која се користи за автоматско конфигурирање на клиентот. Ако не е обезбедена, клиентот ќе работи во режим без WSDL.
Забелешка:
Стандардно, WSDL-датотеката ќе биде кеширана за подобри перформанси. За да го оневозможите или конфигурирате ова кеширање, видете SOAP Опции за конфигурирање Пример #4 Споредување на вратената вредност на include
cache_wsdloption. options-
Асоцијативен низ што специфицира дополнителни опции за SOAP клиентот. Ако
wsdlе обезбедено, ова е опционално; инаку, баремlocationandurlе шифриран (како што треба да биде),-
locationstring -
URL-то на SOAP серверот на кој ќе се испрати барањето.
Задолжително ако
wsdlпараметарот не е обезбеден. Ако иwsdlпараметарот иlocationопцијата се обезбедени,locationопцијата ќе ги надвладее сите локации специфицирани во WSDL-датотеката. -
uristring -
Целниот простор на имиња на SOAP услугата.
Задолжително ако
wsdlпараметарот не е обезбеден; инаку се игнорира. -
styleint -
Специфицира стил на поврзување што ќе се користи за овој клиент, користејќи ги константите
SOAP_RPCandSOAP_DOCUMENT.SOAP_RPCозначува RPC-стил на поврзување, каде што телото на SOAP барањето содржи стандардно кодирање на повик на функција.SOAP_DOCUMENTозначува документ-стил на поврзување, каде што телото на SOAP барањето содржи XML документ со значење дефинирано од услугата.Ако
wsdlако се обезбеди параметарот, оваа опција се игнорира и стилот се чита од WSDL-датотеката.Ако ниту оваа опција ниту
wsdlпараметарот е обезбеден, се користи RPC-стил. -
useint -
Го специфицира стилот на кодирање што треба да се користи за овој клиент, користејќи ги константите
SOAP_ENCODEDorSOAP_LITERAL.SOAP_ENCODEDго означува кодирањето користејќи ги типовите дефинирани во спецификацијата на SOAP.SOAP_LITERALго означува кодирањето користејќи шема дефинирана од услугата.Ако
wsdlако се обезбеди параметарот, оваа опција се игнорира и кодирањето се чита од WSDL-датотеката.Ако ниту оваа опција ниту
wsdlако се обезбеди параметарот, се користи „encoded“ стилот. -
soap_versionint -
Го специфицира верзијата на SOAP протоколот што треба да се користи:
SOAP_1_1за SOAP 1.1, илиSOAP_1_2за SOAP 1.2.Ако е изоставено, се користи SOAP 1.1.
-
authenticationint -
Го специфицира методот за автентикација при користење на HTTP автентикација во барањата. Вредноста може да биде или
SOAP_AUTHENTICATION_BASICorSOAP_AUTHENTICATION_DIGEST.Ако е изоставено, и
loginпараметарот е обезбеден, се користи Basic Authentication. -
loginstring -
Корисничко име што треба да се користи со HTTP Basic или Digest Authentication.
-
passwordstring -
Лозинка што треба да се користи со HTTP Basic или Digest Authentication.
Не треба да се меша со
passphrase, што се користи со автентикација на клиентски сертификат за HTTPS. -
local_certstring -
Патека до клиентски сертификат за употреба со автентикација на HTTPS. Мора да биде PEM enkodirana datoteka што ги содржи сертификатот и приватниот клуч.
Датотеката може да вклучува и синџир на издавачи, кои мора да доаѓаат по клиентскиот сертификат.
Може да се постави и преку
stream_context, што исто така поддржува специфицирање на посебна датотека со приватен клуч. -
passphrasestring -
Лозинка за клиентскиот сертификат наведен во
local_certoption.Не треба да се меша со
password, што се користи за Basic или Digest автентикација.Може да се постави и преку
stream_context. -
proxy_hoststring -
Име на домаќин што ќе се користи како прокси сервер за HTTP барања.
На
proxy_portопцијата мора исто така да биде специфицирана. -
proxy_portint -
TCP порта што ќе се користи при поврзување со прокси серверот наведен во
proxy_host. -
proxy_loginstring -
Изборно корисничко име за автентикација со прокси серверот наведен во
proxy_host, користејќи HTTP Basic автентикација. -
proxy_passwordstring -
Изборна лозинка за автентикација со прокси серверот наведен во
proxy_host, користејќи HTTP Basic автентикација. -
compressionint -
Овозможува компресија на HTTP SOAP барања и одговори.
Вредноста треба да биде бинарно ИЛИ од три дела: опционално
SOAP_COMPRESSION_ACCEPT, за испраќање на "Accept-Encoding" заглавие; илиSOAP_COMPRESSION_GZIPorSOAP_COMPRESSION_DEFLATEза да го означи алгоритмот за компресија што ќе се користи; и број помеѓу 1 и 9 за да го означи нивото на компресија што ќе се користи во барањето. На пример, за да овозможите двонасочна gzip компресија со максимално ниво на компресија, користетеSOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP | 9. -
encodingstring -
Ги дефинира внатрешните кодови на знаците. Барањата секогаш се испраќаат во UTF-8, и се претвораат до и од овој код.
-
tracebool -
Ги снима информациите за барањето и одговорот, до кои потоа може да се пристапи со методите Враќа го XML-от примен во последниот SOAP одговор., SoapClient::__getLastRequest(), SoapClient::__getLastResponse()Препорачаниот начин за избегнување на SQL инјекција е со врзување на сите податоци преку подготвени изрази. Користењето на параметризирани прашања не е доволно за целосно избегнување на SQL инјекција, но тоа е најлесниот и најбезбедниот начин за обезбедување влез во SQL изразите. Сите динамични литерали на податоци во Враќа го XML-от примен во последниот SOAP одговор..
Ако е изоставено, стандардно е
false -
classmaparray -
Се користи за мапирање на типови дефинирани во WSDL кон PHP класи. Треба да биде специфицирано како асоцијативно array with type names from the WSDL as keys and names of PHP classes as values. Note that the type name of an element is not necessarily the same as the element (tag) name.
The provided class names should always be fully qualified with any namespaces, and never start with a leading
\. The correct form can be generated by using ::class.Note that when creating a class, the constructor will not be called, but magic __set() and __get() methods for individual properties will be.
-
typemaparray -
Used to define type mappings using user-defined callback functions. Each type mapping should be an array with keys
type_name(string specifying the XML element type);type_ns(string containing namespace URI);from_xml(callable accepting one string parameter and returning an object) andto_xml(callable accepting one object parameter and returning a string). -
exceptionsbool -
Defines whether errors throw exceptions of type SoapFault.
Стандардно е
true -
connection_timeoutint -
Defines a timeout in seconds for the connection to the SOAP service. This option does not define a timeout for services with slow responses. To limit the time to wait for calls to finish the default_socket_timeout configuration option is available.
-
cache_wsdlint -
Ако
wsdlparameter is provided, and the soap.wsdl_cache_enabled configuration option is on, this option determines the type of caching. One ofWSDL_CACHE_NONE,WSDL_CACHE_DISK,WSDL_CACHE_MEMORYorWSDL_CACHE_BOTH.Two types of cache are available: in-memory caching, which caches the WSDL in the memory of the current process; and disk caching, which caches the WSDL in a file on disk, shared between all processes. The directory to use for the disk cache is determined by the soap.wsdl_cache_dir configuration option. Both caches use the same lifetime, determined by the soap.wsdl_cache_ttl configuration option. The in-memory cache also has a maximum number of entries determined by the soap.wsdl_cache_limit опцијата за конфигурација.
If not specified, the soap.wsdl_cache configuration option will be used.
-
user_agentstring -
ќе се користи опцијата за конфигурација.
User-AgentВредноста што ќе се користи воМоже да се постави и преку
stream_context.HTTP заглавје при правење барања.
"PHP-SOAP/"Ако не е наведено, корисничкиот агент ќе бидеPHP_VERSION. -
stream_contextresource -
А следен од вредноста на креирано од stream_context_create()контекст на стрим
, што овозможува поставување дополнителни опции. Контекстот може да вклучува, SSL опции за контекстопции за контекст на сокет Опции на HTTP контекстот:
content_type,header,max_redirects,protocol_versionПрепорачаниот начин за избегнување на SQL инјекција е со врзување на сите податоци преку подготвени изрази. Користењето на параметризирани прашања не е доволно за целосно избегнување на SQL инјекција, но тоа е најлесниот и најбезбедниот начин за обезбедување влез во SQL изразите. Сите динамични литерали на податоци воuser_agent., плус избрани
'header'Имајте предвид дека следните HTTP заглавја се генерираат автоматски или од други опции и ќе бидат игнорирани ако се специфицирани воhost,connection,user-agent,content-length,content-type,cookie,authorizationПрепорачаниот начин за избегнување на SQL инјекција е со врзување на сите податоци преку подготвени изрази. Користењето на параметризирани прашања не е доволно за целосно избегнување на SQL инјекција, но тоа е најлесниот и најбезбедниот начин за обезбедување влез во SQL изразите. Сите динамични литерали на податоци воproxy-authorization -
featuresint -
опцијата за контекст:
-
SOAP_SINGLE_ELEMENT_ARRAYS -
Маска за битови за овозможување на една или повеќе од следниве карактеристики:
Ако
SOAP_SINGLE_ELEMENT_ARRAYSПри декодирање на одговор во низа, стандардното однесување е да се открие дали името на елементот се појавува еднаш или повеќепати во одреден родителски елемент. За елементи што се појавуваат само еднаш, својство на објект овозможува директен пристап до содржината; за елементи што се појавуваат повеќепати, својството содржи низа со содржината на секој соодветен елемент. -
SOAP_USE_XSI_ARRAY_TYPE -
Кога
useoption карактеристиката е овозможена, елементите што се појавуваат само еднаш се ставаат во низа со еден елемент, така што пристапот е конзистентен за сите елементи. Ова има ефект само кога се користи WSDL што содржи шема за одговорот. Погледнете го делот Примери за илустрација.encodedили својството WSDL е поставено наSOAP-ENC:Array, форсирај ги низите да користат тип на -
SOAP_WAIT_ONE_WAY_CALLS -
, наместо тип специфичен за шемата.
-
-
keep_alivebool -
Чекај одговор дури и ако WSDL укажува на еднонасочно барање.
Connection: Keep-Aliveзаглавие илиConnection: close.Стандардно е
true -
ssl_methodstring -
Ги специфицира верзијата на протоколот SSL или TLS што треба да се користи со безбедни HTTP конекции, наместо стандардното преговарање. Специфицирањето
SOAP_SSL_METHOD_SSLv2orSOAP_SSL_METHOD_SSLv3ќе форсира употреба на SSL 2 или SSL 3, соодветно. СпецифицирањетоSOAP_SSL_METHOD_SSLv23нема ефект; константата постои само за компатибилност со претходните верзии. Од PHP 7.2.0, специфицирањетоSOAP_SSL_METHOD_TLSисто така нема ефект; во претходните верзии, форсираше употреба на TLS 1.0.Имајте предвид дека SSL верзиите 2 и 3 се сметаат за несигурни и можеби нема да бидат поддржани од инсталираната OpenSSL библиотека.
Оваа опција е deprecated од PHP 8.1.0. Пофлексибилна алтернатива, која дозволува специфицирање на индивидуални верзии на TLS, е да се користи
stream_contextопцијата со контекст параметарот 'crypto_method'.<?php
// Specifying use of TLS 1.3 only
$context = stream_context_create([
'ssl' => [
'crypto_method' => STREAM_CRYPTO_METHOD_TLSv1_3_CLIENT
]
]);
$client = new SoapClient("some.wsdl", ['context' => $context]);
-
Errors/Exceptions
SoapClient::__setLocation() ќе генерира
E_ERROR грешка ако location and
uri опциите не се обезбедени во режим што не е WSDL.
А SoapFault ќе биде фрлен исклучок ако
wsdl URI не може да се вчита.
Примери
Пример #1 SoapClient::__setLocation() example
<?php
$client = new SoapClient("some.wsdl");
$client = new SoapClient("some.wsdl", array('soap_version' => SOAP_1_2));
$client = new SoapClient("some.wsdl", array('login' => "some_name",
'password' => "some_password"));
$client = new SoapClient("some.wsdl", array('proxy_host' => "localhost",
'proxy_port' => 8080));
$client = new SoapClient("some.wsdl", array('proxy_host' => "localhost",
'proxy_port' => 8080,
'proxy_login' => "some_name",
'proxy_password' => "some_password"));
$client = new SoapClient("some.wsdl", array('local_cert' => "cert_key.pem"));
$client = new SoapClient(null, array('location' => "http://localhost/soap.php",
'uri' => "http://test-uri/"));
$client = new SoapClient(null, array('location' => "http://localhost/soap.php",
'uri' => "http://test-uri/",
'style' => SOAP_DOCUMENT,
'use' => SOAP_LITERAL));
$client = new SoapClient("some.wsdl",
array('compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP | 9));
$client = new SoapClient("some.wsdl", array('encoding'=>'ISO-8859-1'));
class MyBook {
public $title;
public $author;
}
$client = new SoapClient("books.wsdl", array('classmap' => array('book' => "MyBook")));
$typemap = array(
array("type_ns" => "http://schemas.example.com",
"type_name" => "book",
"from_xml" => "unserialize_book",
"to_xml" => "serialize_book")
);
$client = new SoapClient("books.wsdl", array('typemap' => $typemap));
?>
Пример #2 Користејќи го SOAP_SINGLE_ELEMENT_ARRAYS feature
<?php
/* Assuming a response like this, and an appropriate WSDL:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns="urn:example">
<SOAP-ENV:Body>
<response>
<collection>
<item>Single</item>
</collection>
<collection>
<item>First</item>
<item>Second</item>
</collection>
</response>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
*/
echo "Default:\n";
$client = new TestSoapClient(__DIR__ . '/temp.wsdl');
$response = $client->exampleRequest();
var_dump( $response->collection[0]->item );
var_dump( $response->collection[1]->item );
echo "\nWith SOAP_SINGLE_ELEMENT_ARRAYS:\n";
$client = new TestSoapClient(__DIR__ . '/temp.wsdl', ['features' => SOAP_SINGLE_ELEMENT_ARRAYS]);
$response = $client->exampleRequest();
var_dump( $response->collection[0]->item );
var_dump( $response->collection[1]->item );Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
Default:
string(6) "Single"
array(2) {
[0] =>
string(5) "First"
[1] =>
string(6) "Second"
}
With SOAP_SINGLE_ELEMENT_ARRAYS:
array(1) {
[0] =>
string(6) "Single"
}
array(2) {
[0] =>
string(5) "First"
[1] =>
string(6) "Second"
}