※ ChatGPTを利用し、要約された質問です(原文:simplexml_load_file() のかわりの simplexml_load_string() がエラーになる)
simplexml_load_string()を使ったRSSの読み込みでエラーが発生する
このQ&Aのポイント
PHPのsimplexml_load_string()関数を使用してRSSを読み込んでいる際に、一部のRSSでエラーが発生します。
レンタルサーバではallow_url_fopenをONにできないため、simplexml_load_file()ではなくsimplexml_load_string()を使用しています。
simplexml_load_string()を使用すると、amebloのフィードは正常に読み込めますが、他のRSSではエラーが発生します。原因がわからず、解決策を探しています。
simplexml_load_file() のかわりの simplexml_load_string() がエラーになる
こんにちわ。
お時間あるかた、どうぞよろしくおねがいします。
現在、RSSを読み込んで、色々な処理をしたいと思っています。
そして、下記のコードを書いたところうまくいきました。
$root = simplexml_load_file($url);
ところが、使っているレンタルサーバでは
PHP.iniのallow_url_fopenをONにすることが禁止されていることを知ったので、
simplexml_load_string()を使うように、プログラムを書き換えました。(下記抜粋)
$response = http($url . $parm);
$line = explode("\n" , $response);
// HTTPヘッダを消す
for ( $i=0 ; $i < 100 ; $i++ )
if ( $line[$i] == "" ) break;
// HTTPボディーだけ取得
$xml_str = "";
for ( $i++ ; $i < count($line) ; $i++ )
$xml_str .= $line[$i];
$root = simplexml_load_string($xml_str);
こうしたところ、一部のRSSで、Error while parsing the documentが出るようになってしまいました。
いくつか試したところ、amebloのフィードはOKなのですが、他のRSSだとエラーになるようです。
$ret = get_rss("http://feedblog.ameba.jp/rss/ameblo/femiohji"); // OK
$ret = get_rss("http://pub.ne.jp/marunohi/?action=rss&type=rss1.0"); // NG
というわけで、
simplexml_load_file()のときは動いていたのですが、
simplexml_load_string()にしたらエラーになります。
原因がわからず、行き詰まってしまいました。
よろしくおねがいいたします。
お礼
どうもありがとうございました!
補足
i80286さん、回答ありがとうございます。 試してみた結果、最後に、<rdf.RDF>まで取得できていました。 下記、デバッグ出力結果(抜粋)となります。 「</dc:date></item></rdf:RDF>」 回答いただいた時には、「おおお!」と興奮しましたが、 他にも理由がありそうです。 また、心当たりなど、思いついたことなどがあれば、 些細なことでもぜひご連絡いただけると嬉しいです。 今後とも宜しくお願いいたします。