私は奇妙な、頭の分割の問題をこれまで受けています。実際の問題はSOAPエラーです。SOAP-ERROR: Parsing WSDL: Couldn't load from 'some website' : failed to load external entity
空の文字列を返すfile_get_contents()
これまでのところ、ホストが応答していない、URLが悪いなどの理由がありましたが、今日はホストへの接続に問題はありません。
私はSymfonyを使用してAPIを実行しています。 APIからすべてのSOAPコードを削除し、単純なtest.phpファイルを作成し、APIが実行されている正確なサーバー上のコマンドラインから実行し、完全に機能しました。
私はSymfonyに戻り、キャッシュをフラッシュしました。まだ動かない。
次は、私ができる最も単純な方法をテストし、このSOAP呼び出しを行っているサービスの最上部にある 'file_get_contents(' WSDLへのURL ')を打つことにしました。空文字列を返します。エラーログにエラーはありません。
次コントローラに移動しようとしました。まだ空の文字列です。
私はfile_get_contents('https://google.com')
を試しました。それでもコントローラやサービスのどこにいても空の文字列です。しかし、同じサーバー上でコマンドラインからPHPスクリプトを実行すると問題はありません。
自分のコードをどこに表示するかわからない。 file_get_contents()
がコントローラ、エンティティ、または使用しているサービスにあるかどうかは関係ありません。空の文字列を返すたびに。
補足として、これは開発サーバーです。プロダクションの正確なミラーです(プロダクションサーバーのイメージを作成したばかりです)。 API全体は実稼働環境でも、ローカルの開発環境や他の環境でもうまく動作します。だから私はなぜそれがちょうどこのサーバであるのか、この特定のアプリケーションだけであるのか全くわかりません。
何か助けていただければ幸いです。
==
更新私は、CLI php -i
とApache phpinfo()
の両方でallow_url_fopen
をチェックする友人が、それはOn
==に設定しています両方のケースで示唆したように1
更新2
Pedroが示唆したように、私はcURLテストi APIのコントローラ。そして、それがうまくいって、WDSLの内容、そしてもちろんGoogleを取り出しました。
しかし、URLの内容を取得しないSOAPの根本的な問題は解決しません。明白なfile_get_contents()
も機能しません。 PHP SOAPクライアントはfile_get_contents()
を使用してWSDLを取得しますか?コードが失敗した場合、これは好奇心が強いものについて
==
更新3
。私は会社に固有の情報が含まれているので、たくさんのクラスを省略する必要があります。
<?php
class Carrier implements CarrierInterface
{
//...omitted code
private function getSoapClient($wsdl)
{
// This line is what fails.
return new \SoapClient($wsdl , array('trace' => true));
}
//...omitted code
public function quote(QuoteInterface $quote)
{
//Get the Soap Client
$client = $this->getSoapClient($this->quoteWSDL);
// The rest of the SOAP CALL
return $quote;
}
}
しかし、短期では、$this->quoteWSDL
は単なるURLで、はい、それは私がチェックした正しい値を持っています。 apacheの固定すべてを再起動SOAP-ERROR: Parsing WSDL: Couldn't load from '<url>' : failed to load external entity
==
(ちょっとソリューションとの)アップデート4
を述べSOAPクライアントを構築しようとすると、しかし、それは失敗します。なぜ私はSysAdminにすぐにそれをするように依頼していないのか分かりません。それはIT 101のようなものです。ご協力いただきありがとうございます。しかし、今私はこれがなぜ始まったのか不思議です。奇妙な。
ええ、実際にあなたが答えを投稿する直前にこれをチェックしました。これは有効になっています。私は、このdevサーバが本番サーバのイメージであるため、なぜそれが無効になるのかわかりません。 – Squeegy
私は間違いなく 'curl'を使用したいと思います –
私はcurlでテストできますが、最終的にはSOAP APIを使用するためにSOAPを使用する必要があります。 – Squeegy