SOAP SoapClient::__construct

(PHP 5, PHP 7, PHP 8)

SoapClient::__construct — SoapClient constructor


설명

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

SOAP 서비스에 연결할 SoapClient 개체를 만듭니다.


매개변수

wsdl
클라이언트를 자동으로 구성하는 데 사용되는 서비스를 설명하는 WSDL 파일의 URI입니다. 제공하지 않으면 클라이언트는 비 WSDL 모드에서 작동합니다.

메모: 기본적으로 WSDL 파일은 성능을 위해 캐시됩니다. 이 캐싱을 비활성화하거나 구성하려면 SOAP Configure Options cache_wsdl option을 참조하십시오.

options
SOAP 클라이언트에 대한 추가 옵션을 지정하는 연관 배열입니다. wsdl이 제공되는 경우 이는 선택 사항입니다. 그렇지 않으면 최소한 locationurl을 제공해야 합니다.
location string
요청을 보낼 SOAP 서버의 URL입니다.

wsdl 매개변수가 제공되지 않은 경우 필수입니다. wsdl 매개변수와 location 옵션이 모두 제공된 경우 location 옵션은 WSDL 파일에 지정된 위치를 무시합니다.

uri string
SOAP 서비스의 대상 네임스페이스입니다.

wsdl 매개변수가 제공되지 않은 경우 필수입니다. 그렇지 않으면 무시됩니다.

style int
상수 SOAP_RPCSOAP_DOCUMENT를 사용하여 이 클라이언트에 사용할 바인딩 스타일을 지정합니다. SOAP_RPC는 SOAP 요청 본문에 함수 호출의 표준 인코딩이 포함된 RPC 스타일 바인딩을 나타냅니다. SOAP_DOCUMENT는 SOAP 요청 본문이 서비스 정의 의미를 가진 XML 문서를 포함하는 문서 스타일 바인딩을 나타냅니다.

wsdl 매개변수가 제공되면 이 옵션은 무시되고 WSDL 파일에서 스타일을 읽습니다.

이 옵션과 wsdl 매개변수가 모두 제공되지 않으면 RPC 스타일이 사용됩니다.

use int
상수 SOAP_ENCODED 또는 SOAP_LITERAL을 사용하여 이 클라이언트에 사용할 인코딩 스타일을 지정합니다. SOAP_ENCODED는 SOAP 사양에 정의된 유형을 사용한 인코딩을 나타냅니다. SOAP_LITERAL은 서비스에서 정의한 스키마를 사용한 인코딩을 나타냅니다.

wsdl 매개변수가 제공되면 이 옵션이 무시되고 WSDL 파일에서 인코딩을 읽습니다.

이 옵션이나 wsdl 매개변수가 제공되지 않으면 "인코딩된" 스타일이 사용됩니다.

soap_version int
사용할 SOAP 프로토콜의 버전을 지정합니다. SOAP 1.1의 경우 SOAP_1_1 또는 SOAP 1.2의 경우 SOAP_1_2입니다.

생략하면 SOAP 1.1이 사용됩니다.

authentication int
요청에서 HTTP 인증을 사용할 때 인증 메서드를 지정합니다. 값은 SOAP_AUTHENTICATION_BASIC 또는 SOAP_AUTHENTICATION_DIGEST일 수 있습니다.

생략하고 login 옵션을 제공하면 기본 인증을 사용합니다.

login string
HTTP 기본 또는 다이제스트 인증에 사용할 사용자 이름입니다.
password string
HTTP 기본 또는 다이제스트 인증에 사용할 암호입니다.

HTTPS 클라이언트 인증서 인증에 사용되는 passphrase와 혼동하지 마십시오.

local_cert string
HTTPS 인증에 사용할 클라이언트 인증서의 경로입니다. 인증서와 개인 키가 포함된 PEM 인코딩 파일이어야 합니다.

파일에는 클라이언트 인증서 뒤에 와야 하는 발급자 체인도 포함될 수 있습니다.

또한 별도의 개인 키 파일 지정을 지원하는 stream_context를 통해 설정할 수도 있습니다.

passphrase string
local_cert 옵션에 지정된 클라이언트 인증서의 암호입니다.

기본 또는 다이제스트 인증에 사용되는 password와 혼동하지 마십시오.

stream_context를 통해 설정할 수도 있습니다.

proxy_host string
HTTP 요청에 대한 프록시 서버로 사용할 호스트 이름입니다.

proxy_port 옵션도 지정해야 합니다.

proxy_port int
proxy_host에 지정된 프록시 서버에 연결할 때 사용할 TCP 포트입니다.
proxy_login string
HTTP 기본 인증을 사용하여 proxy_host에 지정된 프록시 서버로 인증하기 위한 선택적 사용자 이름입니다.
proxy_password string
HTTP 기본 인증을 사용하여 proxy_host에 지정된 프록시 서버로 인증하기 위한 선택적 비밀번호입니다.
compression int
HTTP SOAP 요청 및 응답의 압축을 활성화합니다.

값은 세 부분의 비트 OR이어야 합니다. "Accept-Encoding" 헤더를 보내기 위한 선택적 SOAP_COMPRESSION_ACCEPT; 사용할 압축 알고리즘을 나타내는 SOAP_COMPRESSION_GZIP 또는 SOAP_COMPRESSION_DEFLATE 요청에 사용할 압축 수준을 나타내는 1과 9 사이의 숫자. 예를 들어, 최대 압축 수준으로 양방향 gzip 압축을 활성화하려면 SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP | 9.

encoding string
내부 문자 인코딩을 정의합니다. 요청은 항상 UTF-8로 전송되고 이 인코딩으로 변환됩니다.
trace bool
SoapClient::getLastRequest(), SoapClient::getLastRequestHeaders(), SoapClient::getLastResponse()SoapClient::getLastResponseHeaders() 메서드를 사용하여 액세스할 수 있는 요청 및 응답 정보를 캡처합니다.

생략하면 기본값은 false

classmap array
WSDL에 정의된 유형을 PHP 클래스에 매핑하는 데 사용됩니다. WSDL의 유형 이름을 키로 사용하고 PHP 클래스 이름을 값으로 사용하는 연관 배열로 지정해야 합니다. 요소의 유형 이름은 요소(태그) 이름과 반드시 ​​같지는 않습니다.

제공된 클래스 이름은 항상 모든 namespaces로 정규화되어야 하며 선행 \로 시작하지 않아야 합니다. ::class를 사용하여 올바른 형태를 생성할 수 있습니다.

클래스를 생성할 때 생성자는 호출되지 않지만 개별 속성에 대한 매직 __set()__get() 메서드는 호출됩니다.

typemap array
사용자 정의 콜백 함수를 사용하여 유형 매핑을 정의하는 데 사용됩니다. 각 유형 매핑은 키 type_name(XML 요소 유형을 지정하는 문자열)이 있는 배열이어야 합니다. type_ns(네임스페이스 URI를 포함하는 문자열); from_xml(하나의 문자열 매개변수를 수락하고 객체를 반환하는 호출 가능) 및 to_xml(하나의 객체 매개변수를 수락하고 문자열을 반환하는 callable).
exceptions bool
오류가 SoapFault 유형의 예외를 throw하는지 여부를 정의합니다.

기본값은 true

connection_timeout int
SOAP 서비스에 대한 연결 시간 초과를 초 단위로 정의합니다. 이 옵션은 응답이 느린 서비스에 대한 시간 초과를 정의하지 않습니다. 호출이 완료될 때까지 기다리는 시간을 제한하려면 default_socket_timeout 구성 옵션을 사용할 수 있습니다.
cache_wsdl int
wsdl 매개변수가 제공되고 soap.wsdl_cache_enabled 구성 옵션이 켜져 있는 경우 이 옵션은 캐싱 유형을 결정합니다. WSDL_CACHE_NONE, WSDL_CACHE_DISK, WSDL_CACHE_MEMORY 또는 WSDL_CACHE_BOTH 중 하나입니다.

두 가지 유형의 캐시를 사용할 수 있습니다. 현재 프로세스의 메모리에 WSDL을 캐시하는 메모리 내 캐싱; 모든 프로세스 간에 공유되는 디스크의 파일에 WSDL을 캐시하는 디스크 캐싱. 디스크 캐시에 사용할 디렉토리는 soap.wsdl_cache_dir 구성 옵션에 의해 결정됩니다. 두 캐시는 모두 동일한 수명을 사용하며, soap.wsdl_cache_ttl 구성 옵션에 의해 결정됩니다. 또한 메모리 내 캐시에는 soap.wsdl_cache_limit 구성 옵션에 의해 결정되는 최대 항목 수가 있습니다.

지정하지 않으면 soap.wsdl_cache 구성 옵션이 사용됩니다.

user_agent string
요청할 때 User-Agent HTTP 헤더에서 사용할 값입니다.

stream_context를 통해 설정할 수도 있습니다.

지정하지 않으면 사용자 에이전트는 "PHP-SOAP/" 다음에 PHP_VERSION 값이 옵니다.

stream_context resource
추가 옵션을 설정할 수 있도록 하는 stream_context_create()에 의해 생성된 stream context입니다.

컨텍스트에는 socket context options, SSL context options 및 선택한 HTTP context options(content_type, header, max_redirects, protocol_versionuser_agent)이 포함될 수 있습니다.

host, connection, user-agent, content-length, content-type, cookie, authorizationproxy-authorization와 같은 HTTP 헤더는 자동으로 또는 다른 옵션에서 생성되며 'header' 컨텍스트 옵션에 지정된 경우 무시됩니다.

features int
다음 기능 중 하나 이상을 활성화하기 위한 비트마스크:
SOAP_SINGLE_ELEMENT_ARRAYS
배열에 대한 응답을 디코딩할 때 기본 동작은 요소 이름이 특정 상위 요소에 한 번 또는 여러 번 나타나는지 여부를 감지하는 것입니다. 한 번만 나타나는 요소의 경우 개체 속성을 사용하면 콘텐츠에 직접 액세스할 수 있습니다. 두 번 이상 나타나는 요소의 경우 속성에는 일치하는 각 요소의 내용이 포함된 배열이 포함됩니다.

SOAP_SINGLE_ELEMENT_ARRAYS 기능이 활성화되면 한 번만 나타나는 요소가 단일 요소 배열에 배치되므로 모든 요소에 대해 일관된 액세스가 가능합니다. 이는 응답에 대한 스키마가 포함된 WSDL을 사용할 때만 효과가 있습니다. 그림은 예제 섹션을 참조하십시오.

SOAP_USE_XSI_ARRAY_TYPE
use option 또는 WSDL 속성이 encoded 설정된 경우 배열이 스키마별 유형이 아닌 SOAP-ENC:Array 유형을 사용하도록 강제합니다.
SOAP_WAIT_ONE_WAY_CALLS
WSDL이 단방향 요청을 나타내더라도 응답을 기다리십시오.
keep_alive bool
Connection: Keep-Alive 헤더 또는 Connection: close를 보낼지 여부를 정의하는 부울 값.

기본값은 true

ssl_method string
기본 협상 대신 보안 HTTP 연결에 사용할 SSL 또는 TLS 프로토콜 버전을 지정합니다. SOAP_SSL_METHOD_SSLv2 또는 SOAP_SSL_METHOD_SSLv3을 지정하면 각각 SSL 2 또는 SSL 3이 사용됩니다. SOAP_SSL_METHOD_SSLv23을 지정해도 효과가 없습니다. 상수는 이전 버전과의 호환성을 위해서만 존재합니다. PHP 7.2부터 SOAP_SSL_METHOD_TLS를 지정해도 효과가 없습니다. 이전 버전에서는 TLS 1.0을 강제로 사용했습니다.

SSL 버전 2 및 3은 안전하지 않은 것으로 간주되며 설치된 OpenSSL 라이브러리에서 지원하지 않을 수 있습니다.

이 옵션은 PHP 8.1.0부터 사용되지 않습니다. TLS의 개별 버전을 지정할 수 있는 보다 유연한 대안은 'crypto_method' 컨텍스트 매개변수와 함께 stream_context 옵션을 사용하는 것입니다.

예제 #1 TLS 1.3만 사용 지정

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

오류/예외

비 WSDL 모드에서 locationuri 옵션이 제공되지 않으면 SoapClient::__construct()E_ERROR 오류를 생성합니다.

wsdl URI를 로드할 수 없으면 SoapFault 예외가 발생합니다.


Examples

예제 #1 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));

?>
                  
                

예제 #3 SOAP_SINGLE_ELEMENT_ARRAYS 기능 사용

                  
/* 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 );
                  
                

위의 예는 다음을 출력합니다.

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