質問

NuSOAPに依存するPHP4でスクリプトを作成しています。今、私はこれをPHP5に移行し、そこでSOAPのビルドインサポートを使用しようとしています。

$wsdlPath = "";    // I have obviously set these variables to something meaningful, just hidden for the sake of security
$apiPath = "";
$username = "";
$password = "";

// PHP5 style
$client = new soapclient($wsdlPath, array('login'=>username,                
'password'=> $password,
'soap_version'=> SOAP_1_2,
'location'=> $apiPath,
 'trace'=> 1));

// PHP4/NuSOAP style
$client = new soapclient($wsdlPath, true);  
client->setEndpoint($apiPath);                          
$client->setCredentials($username, $password);
$client ->loadWSD);

PHP5バージョンは、次の例外スタックトレースをスローします。

EXCEPTION=SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://external-nbb.napi.norwegian.no.stage.osl.basefarm.net/api/napi1300?wsdl' in /home/eisebfog/public_html/database/norwegian.php:31
Stack trace:
#0 /home/eisebfog/public_html/database/norwegian.php(31): SoapClient->SoapClient('http://external...', Array)
#1 /home/eisebfog/public_html/database/index.php(53): require_once('/home/eisebfog/...')
#2 {main}

NuSOAPバージョンは動作しますが、純粋なPHP5は動作しません。脳外科医が私が何か間違ったことをしていると判断することはありません。 .htaccessファイルにアクセスでき、phpinfo()を使用して、NuSOAPを適切に実行し、必要に応じてPHP5を実行し、必要に応じてPHP4 / Nusoapを実行していることを確認しました。

基本的に、私はWebサービスとSOAPがあまり得意ではありませんが、誰かがアイデアをお持ちの場合は、間違っていることやPHP5でネイティブSOAPに移行する方法についてご意見をいただければ幸いです。ところで、私が最初にこの動きを望んでいるのは、ネイティブ石鹸で想定されるリソースの節約です。これら2つのソリューション間のベンチマークへのリンクもありがたいです。

役に立ちましたか?

解決

NuSoapとPHPv5-SOAPが同じサーバーで実行されていることを確認してください。私がまったく間違っていなければ、両方のライブラリーが同じクラス名を使用します。 NuSopaファイルが含まれていないことを確認しておけば、うまく機能するでしょうか?また、SOAPライブラリがロードされていることも確認します。

if(!extension_loaded('soap')){
  dl('soap.so'); // Actually a deprecated method. See "notes" at http://no.php.net/dl
}

参照するバージョンフィールドは「SOAP 1.1」として定義されていると思います。または似ていますか?

ご多幸をお祈りします:)

ところで:何に取り組んでいますか?パイロットから空港への遅延の交換?あるいは、Oslでの荷物配達の待ち時間を短縮するWebサービスでしょうか? :p

他のヒント

.NETベースのWebサービスを消費しようとするPHP5ビルトインSOAPクライアントで、同様の問題が発生しました。また、WSDL解析は無効なスキーマの報告に失敗しました。スキーマ定義を単一のローカルファイルに入れても役に立ちませんでした。

私たちは試みをあきらめ、NuSOAPに切り替えましたが、うまくいきました。

ただし、NuSOAPも完璧にはほど遠い状態です。現時点では、1MB以上の応答の解析中にメモリ不足の状況に陥ります。厄介なデバッグコードをすべて削除することは少し助けになりましたが、根本的にではありませんでした。

したがって、現時点ではPHPに100%相互運用可能/機能的なSOAPクライアントの実装はないようです。

テストせずに、2つの提案があります:

最初に、error_reportingを可能な限り最高に設定します(SoapClientを作成する前):

error_reporting( E_ALL );

サーバー側の認証に問題がある場合、PHPは警告をスローします。ほとんどの場合、何が間違っているのかがわかります。

2番目:wsdlへのURLとともに 'location'オプションを指定できるかどうかわかりません。理論的には、wsdlはクライアントに操作のエンドポイントがどこにあるかを伝えるので、気にする必要はありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top