私は、WSDLを介して別のサーバー(#2)と石鹸で通信しているLAMPサーバー(#1)を持っています。サーバー1のコマンドラインでサーバー2のURLにcurl呼び出しを発行すると、正常に動作して適切なWSDL応答が得られますが、同じURLへのPHP soapclientが「外部エンティティーのロードに失敗しました」というエラーが発生します。以前はサーバー2で自己署名入りの証明書を持っていましたが、CA証明書にアップグレードした時点で作業をやめました。php SoapClientの接続に失敗しましたが、コマンドラインのcurl呼び出しが機能します
面白いことに、このサーバーは別の場所(別のOS、同じPHPコード/データベース)の別のサーバーと負荷分散されており、2番目のサーバーには全く問題はありません。ここで
は、私は石鹸のクライアントのために使用していますコードです:それはファイアウォールの問題ではありませんので
function getSoapClient(){
ini_set("soap.wsdl_cache_enabled", 0);
// standard soap client for application service
$post_url = lum_getString("[CAMPAIGN_POST_URL]").
"?enterprise=".lum_getString("[CAMPAIGN_ENTERPRISE]").
"&company=".lum_getString("[CAMPAIGN_COMPANY]");
$options = array(
'trace' => true,
'cache_wsdl' => WSDL_CACHE_NONE,
'exceptions' => 1,
'verifypeer' => false,
'verifyhost' => false,
'allow_self_signed' => true,
'login' => lum_getString("[CAMPAIGN_POST_ID]"),
'password' => lum_getString("[CAMPAIGN_POST_LC]"),
);
$context = stream_context_create(
array(
'user_agent' => 'PHPSoapClient',
'ssl' => array(
'verify_peer' => false,
'allow_self_signed' => true,
),
'https' => array(
'curl_verify_ssl_peer' => false,
'curl_verify_ssl_host' => false,
)
)
);
$options['stream_context'] = $context;
$client = new SoapClient($post_url."&wsdl",$options);
return $client;
}
カールとのSoapClientは、同じポートを使用しています。
問題を特定したり、何が間違っているのかを助けたりするのに役立ちます。
作業負荷分散マシンと壊れたクライアントサーバ#1の間でopensslのバージョンが一致していることを確認し、壊れたサーバ#1をバージョン1.01にダウングレードして影響を与えません。 – user3303872