ホームページ  >  記事  >  バックエンド開発  >  PHP SOAP 接続が「SOAP-ERROR: WSDL の解析: [URL] から読み込めませんでした: 外部エンティティ [URL] の読み込みに失敗しました」というエラーで失敗するのはなぜですか?

PHP SOAP 接続が「SOAP-ERROR: WSDL の解析: [URL] から読み込めませんでした: 外部エンティティ [URL] の読み込みに失敗しました」というエラーで失敗するのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-02 21:56:03687ブラウズ

Why does my PHP SOAP connection fail with

SOAP PHP の WSDL 解析エラー: 外部エンティティのロードに失敗しました

PHP を使用して SOAP 接続を確立しようとすると、次のエラーが発生する場合があります「SOAP-ERROR: WSDL を解析中: [URL] から読み込めませんでした: 外部エンティティ [URL] の読み込みに失敗しました。」このエラーは、SOAP クライアントがクライアントのコンストラクターで参照されている WSDL ファイルにアクセスできないことを示します。

トラブルシューティングの手順:

  1. WSDL を確認してくださいファイルが利用可能でアクセス可能です: クライアント コンストラクター URL で指定された WSDL ファイルが指定されたパスに存在し、SOAP クライアントからアクセスできることを確認します。
  2. SSL 検証を無効にする (セキュリティ上の懸念): PHP 5.6.5 以降を使用し、SOAP 1.2 接続を確立している場合は、クライアント コンストラクターに SSL パラメータを追加すると問題が解決される可能性があります:
<code class="php">$opts = array(
    'ssl' => array(
        'ciphers' => 'RC4-SHA',
        'verify_peer' => false,
        'verify_peer_name' => false
    )
);

$params = array(
    'encoding' => 'UTF-8',
    'verifypeer' => false,
    'verifyhost' => false,
    'soap_version' => SOAP_1_2,
    'trace' => 1,
    'exceptions' => 1,
    'connection_timeout' => 180,
    'stream_context' => stream_context_create($opts)
);

$wsdlUrl = $url . '?WSDL';
$oSoapClient = new SoapClient($wsdlUrl, $params);</code>

注: SSL 検証を無効にするとセキュリティ上のリスクが生じるため、運用環境では使用しないでください。

  1. WSDL ファイル形式を確認します: WSDL ファイルが次の形式に準拠する有効な XML ドキュメントであることを確認してください。 WSDL 仕様。
  2. ネットワーク接続を確認します。 SOAP クライアントが WSDL ファイルをホストしているサーバーにネットワーク アクセスできることを確認します。
  3. WSDL ファイル キャッシュの使用を検討してください。 : PHP で WSDL ファイルのキャッシュを有効にすると、ダウンロードの繰り返しを防ぎ、パフォーマンスを向上させることができます:
<code class="php">ini_set("soap.wsdl_cache_enabled", "1");
ini_set("soap.wsdl_cache_ttl", "86400"); // 24 hours</code>

以上がPHP SOAP 接続が「SOAP-ERROR: WSDL の解析: [URL] から読み込めませんでした: 外部エンティティ [URL] の読み込みに失敗しました」というエラーで失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。