2016-04-26 19 views
2

私は奇妙な、頭の分割の問題をこれまで受けています。実際の問題は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のようなものです。ご協力いただきありがとうございます。しかし、今私はこれがなぜ始まったのか不思議です。奇妙な。

答えて

2

私の推測では、allow_url_fopenは無効です。
有効にするには、にallow_url_fopen=1を設定する必要があります。 Apacheサーバーを再起動して設定をリロードします。


curlとお考えですか?ここでは例を示します。

$url = "http://google.com"; 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
$contents = curl_exec($ch); 
curl_close($ch); 

PS:将来のユーザーの場合:あなたが以下のコメントを読んで確認してください。

+0

ええ、実際にあなたが答えを投稿する直前にこれをチェックしました。これは有効になっています。私は、このdevサーバが本番サーバのイメージであるため、なぜそれが無効になるのかわかりません。 – Squeegy

+0

私は間違いなく 'curl'を使用したいと思います –

+0

私はcurlでテストできますが、最終的にはSOAP APIを使用するためにSOAPを使用する必要があります。 – Squeegy

関連する問題