1

API(xml)を介してlast.fmデータを取得するマッシュアップを編集しています。

何らかの理由で、ローカルホストがファイルに接続できません。次のエラーが表示されます。

ストリームを開くことができませんでした: 接続先が一定時間後に適切に応答しなかったために接続の試行が失敗したか、接続されたホストが応答しなかったために確立された接続が失敗しました。C:\Web\Apache\Apache2\htdocs\soctfm\user.php の 35 行目

I/O 警告: 外部エンティティのロードに失敗しました

問題は、私のメインサーバーで正常に動作することです。ローカルホストから xml を取得しようとすると失敗します。

allow_url_fopen両方のサーバーでオンになっています。だから、そうじゃない。PHPのバージョンエラーの可能性があります。

ローカルホストで PHP 5.1.4 を使用しています。

メインサーバーで PHP 5.2.5 を使用しています。

これが問題になる可能性があると付け加えなければなりません。私は大学のインターネットで作業しています。つまり、プロキシ経由でインターネットに接続する必要があります。

最終的には、すべてが正常に機能するはずです。XML とコードは、私のメイン サーバーでは完全に機能しますが、ローカル ホストではうまくいきません。その理由はわかりません。

他にできるデバッグはありますか? それはプロキシでしょうか?

4

2 に答える 2

3

それはほぼ間違いなくあなたのプロキシサーバーです。curlを使用する場合は、プロキシを通過するように設定できます。

于 2009-09-02T10:11:05.450 に答える
3

あなたが言うように、あなたがプロキシの後ろにいる場合、あなたsimplexml_load_fileはおそらく失敗するでしょう:PHPはリモートサーバーに直接接続することができず、XMLファイルをダウンロードすることができません。

2つの可能な解決策:

  • まず、他の何か(curl、プロキシを使用するようにconfiguregなど;で使用できるオプションを参照curl_setoptを使用してデータをフェッチします。その場合にのみ、を使用してsimplexml_load_stringください。
  • または、stream_context_createプロキシを使用するストリームを構成するために使用します。
    • それについて、あなたはそこに私の答えを見ることができます:それはあなたが経験しているのと同じ問題でした
    • ただし、おそらく最初にXMLデータをフェッチする必要があります。その後、パラメータとしてストリームコンテキストを受け入れないように見えるため、それをロードするためfile_get_contentsに使用します:-(simplexml_load_stringsimplexml_load_file

2番目の解決策は非常にうまくいくはずです、私は推測します; あまり多くの作業を必要としないはずです。ローカルホストにいるときに設定するストリームコンテキストだけです。
これは、カールに対処するよりも作業が少ないことを意味します;-)

楽しむ !

于 2009-09-02T10:13:27.177 に答える