PHP 8.5.0 Beta 3 available for testing

SoapClient::__construct

(PHP 5, PHP 7, PHP 8)

SoapClient::__construct — Constructeur SoapClient

Description

public SoapClient::__construct(?string $wsdl, array $options = [])

Crée un objet SoapClient pour se connecter à un service SOAP.

Liste de paramĂštres

wsdl

URI du fichier WSDL ou null s'il travaille en mode non-WSDL.

Note:

Par défaut, le fichier WSDL sera mis en cache pour des raisons de performance. Pour désactiver ou configurer cette mise en cache, consultez la section SOAP Options de configuration et l'option cache_wsdl

options

Un tableau associatif spĂ©cifiant des options supplĂ©mentaires pour le client SOAP. Si le paramĂštre wsdl est fourni, ceci est facultatif ; sinon, au moins les paramĂštres location et url doivent ĂȘtre fournis.

location string

L'URL du serveur SOAP auquel envoyer la requĂȘte.

Requis si le paramÚtre wsdl n'est pas fourni. Si à la fois un paramÚtre wsdl et l'option location sont fournis, l'option location remplacera toute location spécifiée dans le fichier WSDL.

uri string

L'espace de noms cible du service SOAP.

Requis si le paramÚtre wsdl n'est pas fourni; sinon ignoré.

style int

SpĂ©cifie le style de liaison Ă  utiliser pour ce client, en utilisant les constantes SOAP_RPC et SOAP_DOCUMENT. SOAP_RPC indique une liaison de style RPC, oĂč le corps de la requĂȘte SOAP contient un encodage standard d'un appel de fonction. SOAP_DOCUMENT indique une liaison de style document, oĂč le corps de la requĂȘte SOAP contient un document XML avec une signification dĂ©finie par le service.

Si le paramÚtre wsdl est fourni, cette option est ignorée et le style est lu à partir du fichier WSDL.

Si ni cette option ni le paramÚtre wsdl ne sont fournis, le style RPC est utilisé.

use int

Spécifie le style d'encodage à utiliser pour ce client, en utilisant les constantes SOAP_ENCODED ou SOAP_LITERAL. SOAP_ENCODED indique un encodage utilisant les types définis dans la spécification SOAP. SOAP_LITERAL indique un encodage utilisant un schéma défini.

Si le paramÚtre wsdl est fourni, cette option est ignorée et l'encodage est lu à partir du fichier WSDL.

Si cette option et le paramÚtre wsdl ne sont pas fournis, le style "encoded" est utilisé.

soap_version int

Spécifie la version du protocole SOAP à utiliser : SOAP_1_1 pour SOAP 1.1, ou SOAP_1_2 pour SOAP 1.2.

Si omis, SOAP 1.1 est utilisé.

authentication int

SpĂ©cifie la mĂ©thode d'authentification lors de l'utilisation de l'authentification HTTP dans les requĂȘtes. La valeur peut ĂȘtre soit SOAP_AUTHENTICATION_BASIC ou SOAP_AUTHENTICATION_DIGEST.

Si omis et que l'option login est fournie, l'authentification HTTP Basic est utilisée.

login string

Nom d'utilisateur Ă  utiliser avec l'authentification HTTP Basic ou HTTP Digest.

password string

Mot de passe Ă  utiliser avec l'authentification HTTP Basic ou HTTP Digest.

À ne pas confondre avec passphrase, qui est utilisĂ© avec l'authentification par certificat client HTTPS.

local_cert string

Chemin vers un certificat client à utiliser avec l'authentification HTTPS. Il doit s'agir d'un fichier encodé en PEM contenant votre certificat et votre clé privée.

Le fichier peut également inclure une chaßne d'émetteurs, qui doit venir aprÚs le certificat client.

Peut Ă©galement ĂȘtre dĂ©fini via stream_context, qui permet Ă©galement de spĂ©cifier un fichier de clĂ© privĂ©e distinct.

passphrase string

Passphrase pour le certificat client spécifié dans l'option local_cert.

À ne pas confondre avec password, qui est utilisĂ© avec l'authentification HTTP Basic ou HTTP Digest.

Peut Ă©galement ĂȘtre dĂ©fini via stream_context.

proxy_host string

Nom d'hĂŽte Ă  utiliser comme serveur mandataire pour les requĂȘtes HTTP.

L'option proxy_port doit Ă©galement ĂȘtre spĂ©cifiĂ©e.

proxy_port int

Port TCP à utiliser lors de la connexion au serveur mandataire spécifié dans proxy_host.

proxy_login string

Nom d'utilisateur facultatif pour s'authentifier auprÚs du serveur mandataire spécifié dans proxy_host, en utilisant l'authentification HTTP Basic.

proxy_password string

Mot de passe facultatif pour s'authentifier auprÚs du serveur mandataire spécifié dans proxy_host, en utilisant l'authentification HTTP Basic.

compression int

Active la compression des requĂȘtes et des rĂ©ponses SOAP HTTP.

La valeur doit ĂȘtre le rĂ©sultat de l'opĂ©ration OR binaire de trois parties : un SOAP_COMPRESSION_ACCEPT optionnel, pour envoyer l'en-tĂȘte "Accept-Encoding" ; soit SOAP_COMPRESSION_GZIP ou SOAP_COMPRESSION_DEFLATE pour indiquer l'algorithme de compression Ă  utiliser ; et un nombre entre 1 et 9 pour indiquer le niveau de compression Ă  utiliser dans la requĂȘte. Par exemple, pour activer la compression gzip bidirectionnelle avec le niveau de compression maximal, utilisez SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP | 9.

encoding string

DĂ©finit l'encodage de caractĂšres interne. Les requĂȘtes sont toujours envoyĂ©es en UTF-8 et converties depuis et vers cet encodage.

trace bool

Capture les informations de requĂȘte et de rĂ©ponse, qui peuvent ensuite ĂȘtre consultĂ©es Ă  l'aide des mĂ©thodes SoapClient::__getLastRequest(), SoapClient::__getLastRequestHeaders(), SoapClient::__getLastResponse(), et SoapClient::__getLastResponseHeaders().

Si omis, la valeur par défaut est false

classmap array

UtilisĂ© pour associer les types dĂ©finis dans le WSDL aux classes PHP. Il doit ĂȘtre spĂ©cifiĂ© sous la forme d'un tableau associatif avec les noms de types du WSDL en tant que clĂ©s et les noms de classes PHP en tant que valeurs. Notez que les noms de types d'un Ă©lĂ©ment ne correspondent pas nĂ©cessairement au nom de l'Ă©lĂ©ment (balise).

Les noms de classe fournis doivent toujours ĂȘtre entiĂšrement qualifiĂ©s avec tous les espaces de noms, et ne jamais commencer par un \. La forme correcte peut ĂȘtre gĂ©nĂ©rĂ©e en utilisant ::class.

Notez que lors de la création d'une classe, le constructeur ne sera pas appelé, mais les méthodes magiques __set() et __get() pour les propriétés individuelles le seront.

typemap array

UtilisĂ© pour dĂ©finir des correspondances de types Ă  l'aide de fonctions de rappel dĂ©finies par l'utilisateur. Chaque correspondance de type doit ĂȘtre un tableau avec les clĂ©s type_name (une chaĂźne de caractĂšres spĂ©cifiant le type d'Ă©lĂ©ment XML), type_ns (une chaĂźne de caractĂšres contenant l'URI de l'espace de noms), from_xml (un appelable acceptant un paramĂštre de type chaĂźne de caractĂšres et renvoyant un objet) et to_xml (un appelable acceptant un paramĂštre de type objet et renvoyant une chaĂźne de caractĂšres).

exceptions bool

Définit si les erreurs génÚrent des exceptions de type SoapFault.

Par défaut, c'est true

connection_timeout int

Définit un délai d'attente en secondes pour la connexion au service SOAP. Cette option ne définit pas un délai d'attente pour les services ayant une réponse lente. Pour limiter le temps d'attente des appels, l'option de configuration default_socket_timeout est disponible.

cache_wsdl int

Si le paramÚtre wsdl est spécifié et que l'option de configuration soap.wsdl_cache_enabled est activée, cette option détermine le type de mise en cache. L'une des constantes WSDL_CACHE_NONE, WSDL_CACHE_DISK, WSDL_CACHE_MEMORY ou WSDL_CACHE_BOTH.

Deux types de cache sont disponibles : le cache en mĂ©moire, qui met en cache le WSDL dans la mĂ©moire du processus en cours, et le cache sur disque, qui met en cache le WSDL dans un fichier sur le disque partagĂ© entre tous les processus. Le rĂ©pertoire Ă  utiliser pour le cache sur disque est dĂ©terminĂ© par l'option de configuration soap.wsdl_cache_dir. Les deux caches ont la mĂȘme durĂ©e de vie, dĂ©terminĂ©e par l'option de configuration soap.wsdl_cache_ttl. Le cache en mĂ©moire a Ă©galement un nombre maximum d'entrĂ©es dĂ©terminĂ© par l'option de configuration soap.wsdl_cache_limit.

Si non spécifié, l'option de configuration soap.wsdl_cache sera utilisée.

user_agent string

La valeur Ă  utiliser dans l'en-tĂȘte HTTP User-Agent lors des requĂȘtes.

Peut Ă©galement ĂȘtre dĂ©finie via stream_context.

Si non spécifié, l'agent utilisateur sera "PHP-SOAP/" suivi de la valeur de PHP_VERSION.

stream_context resource

Un contexte de flux créé par stream_context_create(), qui permet de définir des options supplémentaires.

Le contexte peut inclure des options de contexte socket, des options de contexte SSL, ainsi que certaines options de contexte HTTP sélectionnées : content_type, header, max_redirects, protocol_version, et user_agent.

Notez que les en-tĂȘtes HTTP suivants sont gĂ©nĂ©rĂ©s automatiquement ou Ă  partir d'autres options, et seront ignorĂ©s s'ils sont spĂ©cifiĂ©s dans l'option de contexte 'header' : host, connection, user-agent, content-length, content-type, cookie, authorization et proxy-authorization.

features int

Un masque de bits pour activer une ou plusieurs des fonctionnalités suivantes :

SOAP_SINGLE_ELEMENT_ARRAYS

Lors du décodage d'une réponse en tableau, le comportement par défaut consiste à détecter si un nom d'élément apparaßt une seule fois ou plusieurs fois dans un élément parent particulier. Pour les éléments qui n'apparaissent qu'une fois, une propriété d'objet permet un accÚs direct au contenu ; pour les éléments qui apparaissent plus d'une fois, la propriété contient un tableau avec le contenu de chaque élément correspondant.

Si la fonctionnalité SOAP_SINGLE_ELEMENT_ARRAYS est activée, les éléments qui n'apparaissent qu'une seule fois sont placés dans un tableau à un seul élément, de sorte que l'accÚs soit cohérent pour tous les éléments. Cela n'a d'effet que lors de l'utilisation d'un WSDL contenant un schéma pour la réponse. Consultez la section des examples pour une illustration.

SOAP_USE_XSI_ARRAY_TYPE

Lorsque l'option use option ou la propriété WSDL est définie sur encoded, force les tableaux à utiliser un type SOAP-ENC:Array, plutÎt qu'un type spécifique au schéma.

SOAP_WAIT_ONE_WAY_CALLS

Attendre une rĂ©ponse mĂȘme si le WSDL indique une requĂȘte Ă  sens unique.

keep_alive bool

une valeur boolĂ©enne dĂ©finissant si envoyer l'en-tĂȘte Connection: Keep-Alive ou Connection: close.

Par défaut, c'est true

ssl_method string

SpĂ©cifie la version du protocole SSL ou TLS Ă  utiliser avec les connexions HTTP sĂ©curisĂ©es, au lieu de la nĂ©gociation par dĂ©faut. SpĂ©cifier SOAP_SSL_METHOD_SSLv2 ou SOAP_SSL_METHOD_SSLv3 forcera l'utilisation de SSL 2 ou SSL 3, respectivement. SpĂ©cifier SOAP_SSL_METHOD_SSLv23 n'a aucun effet ; cette constante n'existe que pour des raisons de compatibilitĂ© ascendante. À partir de PHP 7.2, spĂ©cifier SOAP_SSL_METHOD_TLS n'a Ă©galement aucun effet ; dans les versions antĂ©rieures, cela forçait l'utilisation de TLS 1.0.

Il est Ă  noter que les versions SSL 2 et 3 sont considĂ©rĂ©es comme non sĂ©curisĂ©es et peuvent ne pas ĂȘtre prises en charge par la bibliothĂšque OpenSSL installĂ©e.

Cette option est obsolÚte à partir de PHP 8.1.0. Une alternative plus flexible, qui permet de spécifier des versions individuelles de TLS, consiste à utiliser l'option contexte_de_flux avec le paramÚtre de contexte 'crypto_method'.

Exemple #1 Spécifier l'utilisation de TLS 1.3 uniquement

<?php
$context
= stream_context_create([
'ssl' => [
'crypto_method' => STREAM_CRYPTO_METHOD_TLSv1_3_CLIENT
]
]);
$client = new SoapClient("some.wsdl", ['context' => $context]);

Erreurs / Exceptions

SoapClient::__construct() génÚrera une erreur de type E_ERROR si les options location et uri ne sont pas fournies en mode non-WSDL.

Une exception de type SoapFault sera lancĂ©e si l'URI wsdl ne peut ĂȘtre chargĂ©e.

Exemples

Exemple #2 Example SoapClient::__construct()

<?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));

?>

Exemple #3 Utilisant la fonctionnalité SOAP_SINGLE_ELEMENT_ARRAYS

<?php
/* En supposant une réponse comme celle-ci, et un WSDL approprié:
<?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 );

L'exemple ci-dessus va afficher :

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"
}

add a note

User Contributed Notes 1 note

up
2
turabgarip at gmail dot com ¶
1 year ago
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]);
?>
To Top