web-dev-qa-db-ja.com

PHP SoapClient with a local WSDL file(NON-URI)?)を使用するための回避策はありますか?

ローカルのhttpdを実行していない、または実行する必要がないサーバーで、アプリケーションをCLIモードで実行しています。アプリケーションは、SOAPを使用してWebサービスプロバイダーとの発信対話を行います。問題のプロバイダーにはいくつかの可用性の問題があり、提案に従ってローカルでWSDLファイルをホストすることで問題の数を減らすようにしています。

(WSDLモードの)SoapClientコンストラクターはURI WSDLファイルのみを使用できるようですが、この制限を回避するいくつかの方法を見つけて、何らかの方法でローカルファイルシステムからWSDLファイルを読み取らせようとしています。 SoapClientコンストラクターにファイル名またはテキストの文字列を渡すオプションがないことには驚きます。

この制限を回避し、私が試みていることを行う方法についての提案はありますか?

18
jrebs

SoapClient() は、WebアドレスだけでなくローカルファイルパスもサポートするURIを取ります。ただし、相対パスはここでは機能しないため、完全なファイルパスである必要があります。

相対参照を使用してローカルWSDLファイルをロードする方法は次のとおりです。 WSDLが現在のPHPファイルと同じディレクトリにある場合:

new SoapClient(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'the.wsdl.xml');

または、現在のPHPファイルのサブフォルダーにある場合:

new SoapClient(dirname(__FILE__) . DIRECTORY_SEPARATOR. 'subfolder' . DIRECTORY_SEPARATOR . 'the.wsdl.xml');

または、現在のPHPファイルの親フォルダーにある場合:

new SoapClient(dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'the.wsdl.xml');
34
efreed