プロが教える店舗&オフィスのセキュリティ対策術

PHP5においてsimplexml_load_fileを使って、様々なサイトのRSS(XML)を読み込もうとしています。
一部のサイトに対してFalseが返ってきます。いまいちコンディションが掴みきれておらず
うまくいくことうまくいかないことを記述させていただきます。

PHP設置環境の種類
ローカルサイト上のLinux、レンタルサーバA、レンタルサーバB、レンタルサーバC

ターゲットRSS
NHK http://www3.nhk.or.jp/rss/news/cat0.xml
はてな http://feeds.feedburner.com/hatena/b/hotentry
毎日新聞 http://mainichi.jp/rss/etc/flash.rss

問題となるのは毎日新聞です。環境によって読めたり読めなかったりします。

ローカルでの結果 NHK、はてな、毎日新聞 いずれもOK
レンタルサーバA 毎日だけNG
レンタルサーバB すべてOK
レンタルサーバC 毎日だけNG

今回はこのサーバAやCの問題をクリアしたいのですが方法がわかりません。
simplexml_load_fileがNHKやはてなに対して動作するのに毎日に対してのみ動かないという
観点からすると毎日側の仕様の影響かとも思うのですが、
PHPの設置環境によって動作が変わるという観点も加味すると
PHPの設置環境の何かに依存し、読み込み対象が絞られる、というようなイメージを持っています。

いずれも無料サーバということもあり、検討ぐらいつけてから管理人に相談させていただくのが
良いかと思いこの場をお借りしております。
なお、レンタルサーバCは.land.toです。

よろしくお願いいたします。

エラー文
$data = simplexml_load_file($rss);
if ($data == FALSE){
echo "Failed loading XML<br>\n";
foreach(libxml_get_errors() as $error) {echo "\t", $simplexml_load_fileerror->message;}//Failed loading XML was the returned error
}
Warning: simplexml_load_file(http://rss.yomiuri.co.jp) [function.simplexml-load-file]: failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden in /home/httpd/****/public_html/php/rss.php on line 9
Failed loading XML
failed to load external entity "http://rss.yomiuri.co.jp"
なお、rss.phpのline 9は $data = simplexml_load_file($rss);です。

A 回答 (3件)

ANo.2です



>取り回しが楽なのでsimplexml_load_fileがよいので

file_get_contentsとsimplexml_load_stringを組み合わせて使えば「どちらでエラーになるのか」で、そもそも読めない状態なのか読み込んだデータ形式がおかしいのかの判断は出来ると思います。当面はそうやって問題の切り分けを行ってみてはどうでしょう。
    • good
    • 0
この回答へのお礼

ありがとうございます。
ご指摘の通り、試したところ、うまく読み込めてしまいました。
以下のコードを並べて記述してみましたがsimplexml_load_fileではやはり何も出力されなかったので何らかのsimplexml_load_fileの仕様が毎日新聞のRSS と影響しているようでした。
$source = file_get_contents('http://mainichi.jp/rss/etc/flash.rss');
$data = simplexml_load_string($source);
#表示される
$rss = "http://mainichi.jp/rss/etc/flash.rss";
$data = simplexml_load_file($rss);
#表示されない
いずれにせよ、ひとまずこれで乗り切ろうかと思います。
ありがとうございます。

お礼日時:2012/05/15 00:00

#可能であれば各サーバのphpのバージョンを


#併記していただくとありがたいのですが(汗

simplexml_load_fileでなく、fileやfile_get_contentsだと取得出来ますか?simplexml_load_file自体はバージョンによってさほどの違いがなかったように記憶していますので、そもそも当該サーバ(のIPアドレス)からのアクセス自体が制限されている可能性が否定出来ません。

この回答への補足

ありがとうございます。数日おいたところ何も変えないままちょっと現在動作してしまっているのでまたご報告しますがひとまずバージョンについて一応記載します。
サーバA PHP Version 5.3.3
ローカル PHP Version 5.3.3
サーバB PHP Version 5.2.17
サーバC PHP Version 5.2.11

補足日時:2012/05/14 00:06
    • good
    • 0
この回答へのお礼

何度もすみません。
動作確認でサーバAを試したところサーバAをのみやはり毎日新聞のRSS(http://mainichi.jp/rss/etc/flash.rss)のみ出力されませんでした。
ご指摘いただいたとおりfile_get_contentsを試したところ、毎日新聞のRSSを取得することができてしまいました。取り回しが楽なのでsimplexml_load_fileがよいので
どうもサーバAと毎日新聞、simplexml_load_fileの3つの組み合わせがキーのようですが他のRSSも読み込んでより切り分けを進めてみたいと思います。

お礼日時:2012/05/14 00:31

読売新聞だと、403になりますね。

毎日新聞のだとどうなるかを補足したら回答が得られやすいかも。

> Warning: simplexml_load_file(http://rss.yomiuri.co.jp)

この回答への補足

ご指摘ありがとうございます。
誤記しておりました。http://rss.yomiuri.co.jp/rss/yol/topstories改めてアクセスしてみたところRSSが表示されました。
またRSSページを直接開いた時に以前は直接XMLが開けなかったので何らかの仕様が変わった可能性があります。
もうちょっと動作確認の後お礼とさせてください

補足日時:2012/05/14 00:00
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!