小さなcronジョブでfsockopenを使用して、さまざまなサーバーのフィードを読み取って解析しています。ほとんどの場合、これは非常にうまく機能します。しかし、一部のサーバーでは、応答に次のような非常に奇妙な行が表示されます。
<言語>エン語</言語> <sy:updatePeriod>毎時</ sy:updatePeriod> <sy:updateFrequency> 1 </ sy:updateFrequency> 11 <アイテム> <タイトル> 1f 2010年7月8日</title> <リンク> 32 http://darkencomic.com/?p=2406 </ link> <コメント> 3e
しかし、たとえばnotepad ++でフィードを開くと、正常に機能し、次のように表示されます。
<言語>エン語</言語> <sy:updatePeriod>毎時</ sy:updatePeriod> <sy:updateFrequency> 1 </ sy:updateFrequency> <アイテム> <title>2010年7月8日</title> <link> http://darkencomic.com/?p=2406 </ link> <コメント>
...抜粋を表示するだけです。それで、私はここで何か間違ったことをしていますか、それともこれは私のコントロールを超えていますか?これを修正するためのアイデアに感謝します。フィードを取得するために使用しているコードの一部は次のとおりです。
$ fp = @fsockopen($ url ["host"]、80、$ errno、$ errstr、5); if(!$ fp){"。$url["host"]。" "); を開くときに新しいUrlException("($ errno)$errstr~~~をスローします。 } そうしないと { $ out ="GET"。$path。"HTTP/ 1.1 \ r \ n" 。"ホスト:"。$url["host"]。"\r \ n" 。"接続:閉じる\ r \ n \ r \ n"; fwrite($ fp、$ out); $ contents =''; while(!feof($ fp)){ $contents。=stream_get_contents($ fp、128); } fclose($ fp);