2

ネットワークに 3 つのボックスがあります

Box#1 - Apache と php を備えた RHEL ボックス (基本的には LAMP ボックス)
Box#2 - Apache 軸 2 を使用して WSDL をホストする JBoss を備えた Windows ボックス
Box#3 - 別の Windows ボックス (基本的には XAMPP ボックス -- 詳細については、 3 番目のボックスは後で)

ブラウザーで SoapClient オブジェクトを使用して box#2 の WSDL にアクセスする PHP スクリプトを box#1 で実行しようとすると、次のように返されます。

Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://XXX.XXX.XXX.XXX:8080/axis2/services/TheService?wsdl': failed to load external実在物

次に、戻ってきた wsdl ファイルの file_get_contents を単純化するために、box#2 を試しました。

警告: file_get_contents(http://XXX.XXX.XXX.XXX:8080/axis2/services/TheService?wsdl): ストリームを開けませんでした: 4 行目の /application/test.php で許可が拒否されました

でも!Apacheを実行している同じユーザーとしてログインすると、telnet(コマンドライン)経由で最後のスクリプト(file_get_contents)を実行すると、WSDLのコンテンツが返されます...(!)

--

同じコードをWindowsボックス(ボックス#3)で実行しようとしましたが、PHP.ini設定がボックス#2と非常に似ているように見えますが、可能な限り同一ではなく、wsdlを使用してコンテンツを取得できました問題なく WSDL ファイルの

--

私は(stackoverflowとgoogle)を検索し、他の人が同じ問題を抱えているのを見て、次のような解決策を試しました:

  • PHP.ini の max_file_size が 128M に設定されています (wsdl よりも大きい)
  • allow_url_fopen がオンに設定されている

ボックス#1で機能するかどうかを確認するために、cURLを使用してファイルの内容を取得しようとしましたが、何も返されませんでした。

誰かが私に洞察を与えることができれば、それは大歓迎です。PHP.ini に設定がないか、かなりマイナーな設定があると確信しています。

4

1 に答える 1

8

今日、この同じ問題に遭遇しました。数時間後file_get_contents、WSDL URL を試した後、Apache エラー ログにアクセス許可拒否エラーが記録されていることに気付きました。SELinuxが原因であることがわかりました。デフォルトでは、SELinux は httpd が独自のネットワーク要求を行うことをブロックしていると思います (少なくとも Fedora では)。

これsetsebool -P httpd_can_network_connect 1により、Apache がリモート サービスに接続できるようになりました (SSL 要求と非 SSL 要求の両方で機能しました)。

ここでも回答: SOAP-ERROR: Parsing WSDL: Couldn't load from url

于 2012-10-24T06:52:32.730 に答える