2017-11-27 4 views
1

PHP 5.6(RH6)でうまく動作するsoapClient呼び出しがあります。システムをPHP 7(前回と同じ設定のRH7)にアップグレードしていますが、同じ呼び出しが機能しません。SoapClient呼び出しは、PHP 5.6では動作しますが、PHP 7では動作しません。

これは、私はそれが動作CURLを使用して電話をかける場合、私はPHP 7下に入るエラーが

PHP Fatal error: Uncaught SoapFault exception: [HTTP] Could not connect to host

である私のコード

$wsdlUrl = "https://THE_URL_I_AM_CALLING/repository/soap/2.1?wsdl"; 
$sslClientCert = "../../app/config/ssl/ssl_cert.crt"; 
$sslClientKey = "../../app/config/ssl/ssl_cert.key"; 

$proxy = 'proxy_http'; 
$port = 8080; 

$contextOptions = [ 
    'ssl' => [ 
     'local_cert' => $sslClientCert, 
     'local_pk' => $sslClientKey, 
     'SNI_enabled' => true, 
     'SNI_server_name' => 'THE_URL_I_AM_CALLING' 
    ] 
]; 

$options= [ 
    "soap_version" => SOAP_1_2, 
    "features" => SOAP_SINGLE_ELEMENT_ARRAYS, 
    "stream_context" => stream_context_create($contextOptions), 
    'proxy_host'  => $proxy, 
    'proxy_port'  => $port 
]; 

$client = new SoapClient($wsdlUrl, $options); 

try { 
     // execute the search 
     $searchResults = $client->searchDocuments([ 
      "text" => "myText", 
      "hint" => "document" 
     ]); 
    } 
    catch (Exception $e) { 
     echo $e->getMessage(); 
    } 

です。

私は人生を楽にするために、むしろclientSoapを使用します。

+0

「php7」に「soap」を有効にしていることを確認してください。 – urfusion

+0

チェックしました。有効になっています – Jon

+0

あなたはアップグレードしていると言いますが、有効な内線番号と設定を5.6と7の間で比較しましたか?ホストに接続できないため、SSL関連の問題のように聞こえます。 'openssl'拡張が有効であることを確認してください。また、 'dirname(dirname(__ DIR__)) 'を使うほうが、相対URIをcertファイルに変更しようとします。それ以外の場合は、 '' ssl "=> array( 'verify_peer' => false、 'verify_peer_name' => false)'を 'contextOptions'に追加して、' 'app/config/ssl /証明書の問題。あなたのphp.iniに 'curl.cainfo'と' openssl.cafile'を定義する必要があるかもしれません。 – fyrye

答えて

0

解決策が見つかりました。地球上の他の魂はこの試練を経なければならないので、ここに掲示する。変更後の文書 http://php.net/manual/en/context.ssl.php#context.ssl.sni-server-name

SNI_server_name (string): If set, then this value will be used as server name for server name indication. If this value is not set, then the server name is guessed based on the hostname used when opening the stream.

Note: This option is deprecated, in favour of peer_name, as of PHP 5.6.0.

によると

'SNI_server_name' => 'THE_URL_I_AM_CALLING' 

それが動作

'peer_name' => 'THE_URL_I_AM_CALLING' 

と。

関連する問題