2009-09-02 17 views
1

私は自分のAPI(xml)を使ってlast.fmデータを取り出すマッシュアップを編集しています。PHP Simplexmlがローカルホスト上で失敗する

私のローカルホストはファイルに接続できません。次のエラーが発生します。接続 パーティが適切に時間の 期間後に応答しなかったため、接続 試みが失敗した、または接続されている ホストが応答しなかったために確立 接続に失敗しました:

は、ストリームをオープンに失敗しました。 Cに:\ウェブ\ Apacheの\ Apache2の\ htdocsに\ soctfm \は、ライン上の user.php 35

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

問題は、それは私のメインサーバで正常に動作することです。自分のlocalhostからxmlを取得しようとすると失敗します。

allow_url_fopenは両方のサーバーでオンです。そうではありません。これは、PHPのバージョンエラーがあります。

私のlocalhostでPHP 5.1.4を使用しています。

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

私は問題になると思いますが、私は大学のインターネットから働いています。つまり、プロキシ経由でインターネットに接続する必要があります。

最後に、すべてが正常に動作するはずです。 XMLとコードは私のメインサーバー上で完璧に動作しますが、私のlocalhostで失敗することがあります。理由はわかりません。

これ以上デバッグができますか?それはプロキシーでしょうか?

答えて

3

ほとんどの場合、プロキシサーバーです。 curlを使用する場合は、プロキシを経由するように設定できます。

+0

ありがとうございました。まだカールは使用していません。それを読むだろう。 –

3

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

2つの解決策:

  • まず、何か他のものと、データをフェッチ(カールのように、プロキシを使用するようにconfigureg、あなたがcurl_setoptで使用できるオプションを参照)。その後はsimplexml_load_stringを使用します。
  • または、stream_context_createを使用して、プロキシを使用するストリームを構成します。それについて
    • 、あなたはmy answer thereを見ることができます:それはあなたが
    • けれども、あなたはおそらくfile_get_contentsで、最初のXMLデータをフェッチする必要があり、かつ、だけにして、ロードするためにsimplexml_load_stringを使用しますが発生している同じ問題でしたsimplexml_load_fileとして第二の溶液は、私が思うかなり素敵に動作するはずです:-(

パラメータとしてストリームコンテキストを受け入れるようには見えませんが、あまりにも多くの仕事を必要としないでください。ちょうどストリームローカルホスト上にいるときに設定するコンテキスト。
これはカールを処理するよりも仕事量が少ないことを意味します;-)

楽しくお楽しみください!

+0

いい答えですが、私はあなたの含意に「カールに対処しなければならない」ということは困難です。 – GZipp

関連する問題