[解決済み] SOAP-ERROR: WSDLのパース: からロードできませんでした - しかし、WAMPで動作します。
2022-03-12 23:24:02
質問
これは、私のWAMPサーバーでは正常に動作しますが、Linuxマスターサーバーでは動作しません!?
try{
$client = new SoapClient('http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl', ['trace' => true]);
$result = $client->checkVat([
'countryCode' => 'DK',
'vatNumber' => '47458714'
]);
print_r($result);
}
catch(Exception $e){
echo $e->getMessage();
}
何を見落としているんだ! :(
SOAPが有効
エラー
SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl' : failed to load external entity "http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl"/taxation_customs/vies/checkVatService.wsdl"
PHPからURLを呼び出す
PHPからURLを呼び出すとエラーが発生する
$wsdl = file_get_contents('http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl');
echo $wsdl;
エラー
Warning: file_get_contents(http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl): failed to open stream: HTTP request failed! HTTP/1.0 503 Service Unavailable
コマンドラインからURLを呼び出す
linuxのコマンドラインからURLを呼び出す
HTTP 200
はXMLレスポンスで返されます
curl http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl
解決方法は?
php のバージョンによっては、SoapClient が http ユーザーエージェント情報を送信しません。サーバー上のphpのバージョンと、ローカルのWAMPのバージョンを教えてください。
以下のようにコンテキストストリームを使用して、明示的にユーザーエージェントを設定してみてください。
try {
$opts = array(
'http' => array(
'user_agent' => 'PHPSoapClient'
)
);
$context = stream_context_create($opts);
$wsdlUrl = 'http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl';
$soapClientOptions = array(
'stream_context' => $context,
'cache_wsdl' => WSDL_CACHE_NONE
);
$client = new SoapClient($wsdlUrl, $soapClientOptions);
$checkVatParameters = array(
'countryCode' => 'DK',
'vatNumber' => '47458714'
);
$result = $client->checkVat($checkVatParameters);
print_r($result);
}
catch(Exception $e) {
echo $e->getMessage();
}
編集
実は、お使いのウェブサービスに何らかの問題があるようです。HTTP over IPv6とHTTP User Agent文字列の欠落の組み合わせが、ウェブサービスに問題を与えているようです。
これを確認するために、Linuxホストで以下を試してみてください。
curl -A '' -6 http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl
このIPv6リクエストは失敗です。
curl -A 'cURL User Agent' -6 http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl
このIPv6リクエストは成功する。
curl -A '' -4 http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl
curl -A 'cURL User Agent' -4 http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl
という2つのIPv4リクエストに成功しました。
面白いケースですね :) あなたのLinuxホストがec.europa.euをIPv6アドレスに解決し、あなたのバージョンのSoapClientがデフォルトでユーザーエージェント文字列を追加していないのでしょう。
関連
-
[解決済み】「初期通信パケットの読み込み」でMySQLサーバーに接続できなくなり、システムエラーになる。0
-
[解決済み】mysqli_result クラスのオブジェクトを文字列に変換できない
-
[解決済み】Phpのincludeが機能しない? 関数がincludeされない
-
[解決済み】 $_SERVER['DOCUMENT_ROOT'] と $_SERVER['HTTP_HOST'] の違いについて]
-
[解決済み] $wpdb->update または $wpdb->insert を実行すると、引用符の前にスラッシュが追加される
-
[解決済み】未定義の関数mysql_query()をLoginで呼び出す【重複
-
[解決済み】Netbeans 7.4 for PHPで「スーパーグローバルな$_POST配列に直接アクセスしないでください」という警告が発生する。
-
[解決済み] PHP product.php?id=1 のような URL を作成する方法
-
[解決済み] PHP 未定義関数への呼び出し
-
[解決済み] libapache2-mod-php7 パッケージの場所がわからない
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Fatal error: 未定義の関数 sqlsrv_connect() を呼び出した。
-
[解決済み】mysqli_result クラスのオブジェクトを文字列に変換できない
-
[解決済み】メンバ関数をnullで呼び出す?
-
[解決済み】XAMPPのphpMyAdminで「設定にあるcontroluserの接続に失敗しました。
-
[解決済み】php, mysql - データベースへの接続数が多すぎるエラー
-
[解決済み】 libapache2-mod-php7 パッケージが見つからない。
-
[解決済み】メッセージ。Trying to access array offset on value of type null [重複]配列のオフセットにアクセスしようとしています。
-
[解決済み】/var/www/htmlとは何ですか?[クローズド]
-
[解決済み】書き込みコンテキストでメソッドの戻り値を使用することができない
-
[解決済み】file_get_contents(): SSL 操作にコード 1 で失敗した、暗号を有効にするのに失敗した