PHP(ピー・エイチ・ピー)

リダイレクトしているURLからではcurl()でデータを取得できない!?

なぜか

<?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); ?>

また一つ勉強になりました!!!

この記事を書いている人
株式会社ディープ

名前ダッチ

メールアドレスadachi@deep-deep.jp

Twitterはこちら >>

関連記事

最近の記事

  1. レンタルサーバ:おすすめの共用サーバ
  2. アフィリエイト
  3. VPSサーバー
  4. ブログのネタ探し
  5. プログラミング
  6. SSLとは
  7. 常時SSL通信設定後にやっておくべきこと
  8. 常時SSL通信設定方法
  9. htaccessとは
  10. WordPress

Twitter

ダッチ@職業ブロガー兼プログラマー
@gatsu0000

  • リモートやってみて分かったこと。 会社って意外と仕事に集中できていなかった。 当たり前か。会社って、別に落ち着ける空間じゃないですからね。
    about 2日 ago via Twitter Web App

アーカイブ

PAGE TOP