なぜか
<?php $rss = "RSSのURLが入ります"; $ch = curl_init($rss); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $xmldoc = curl_exec($ch); curl_close($ch);
simplexml_load_string($xmldoc); ?>
というコードで、
Warning: simplexml_load_string() [function.simplexml-load-string]: Entity: line 25: parser error : expected ...
とエラーが!?
どうして!?
理由が分からないので、
取り敢えずいろいろ調べてみると、
=======================================
LocationでリダイレクトされているRSSのURLの場合、
リダイレクト元のURLにはXMLなどのデータがなく、
正常にデータを取得できない!!
=======================================
みたいなことを分かりづらく書いてある記事を見つけました。
要は、
$rss = "RSSのURLが入ります";
の部分に
http://www.sample/feed/
というURLを設定していたとします。
が、
実際には
http://www.sample/feed/
は
http://www.hoge/rss2/feed/
など別のURLへリダイレクトされているので、
データを正常に取得できない!!
ということです。
なので、
simplexml_load_string()関数でエラーが出てしまったようです。
こういう場合は、
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
curl_setopt( $ch, CURLOPT_MAXREDIRS, 10);
というオプションを付けてやると、
LocationでリダイレクトされているURLを辿ってくれるとのことです。
まとめてやると、こうなります。
<?php $rss = "RSSのURLが入ります"; $ch = curl_init($rss); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_MAXREDIRS, 10); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $xmldoc = curl_exec($ch); curl_close($ch);
simplexml_load_string($xmldoc); ?>
また一つ勉強になりました!!!
この記事へのコメントはありません。