こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

外部のテキストファイルを読み込みたい

はじめまして、phpを勉強しています。
ちょっとつまづいてしました。
質問をさせて下さい。
(phpは5.25の環境になります)

$mainrss = array (
'http://www.hoge.com/?feed=rss2',
'http://www.hoge2.com/?xml',
'http://www.hoge3.com/index20.rdf'
);

$rssarray = array();
$today = date(U);
foreach ($mainrss as $url){
$rss = fetch_rss($url);
$title = $rss->channel['title'];
$title = mb_convert_encoding($title, "UTF-8", "auto");
(省略)

上記の
$mainrss = array (
'http://www.hoge.com/?feed=rss2',
'http://www.hoge2.com/?xml',
'http://www.hoge3.com/index20.rdf'
);
部分を
$mainrssarray = file('rss.txt'); として外部テキストファイルからデータを呼び込もうとしたのですがだめでした。

rss.txtの内容
'http://www.hoge.com/?feed=rss2',
'http://www.hoge2.com/?xml',
'http://www.hoge3.com/index20.rdf'

どのようにすれば外部のテキストファイルから呼び込んでくれるでしょうか?
初心者的な質問で大変申し訳ないんですが、アドバイスをよろしくお願い致します;;

投稿日時 - 2009-01-14 01:08:43

QNo.4628614

困ってます

質問者が選んだベストアンサー

$mainrssarray = file('rss.txt');
foreach ($mainrss as $url){
って変数名違うんじゃ?

rss.txtの内容
'http://www.hoge.com/?feed=rss2',
'http://www.hoge2.com/?xml',
'http://www.hoge3.com/index20.rdf'
ってクォートとカンマはいりませんよ?

file() だと改行コードついてくるけどそれは大丈夫なんかな?

投稿日時 - 2009-01-14 04:17:12

お礼

回答有難うございます!

本文では修正していない(古い方)のソースコードをコピペしてしまいました。
指摘されました通りforeach ($mainrss as $url)で記述していました。


rss.txtの内容をクォートとカンマをとってみました。
でもだめでした。

投稿日時 - 2009-01-14 05:16:24

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.5

>でもだめでした。
どうだめでした?
もう1回 var_dump 結果とエラー内容を。
補足の結果を見る限りでは rss.txt の記述に
スペースが入っているとか、記号がおかしいとかそんなとこでは?

投稿日時 - 2009-01-14 22:26:37

ANo.4

改行かな?

foreachの最初に
$url = trim($url);
を入れてみて下さい。

投稿日時 - 2009-01-14 06:18:10

お礼

私用でお返事おくれて申し訳ございません。
アドバイス通りにしたらなんと!表示してくれました。
有難うございます><

投稿日時 - 2009-01-20 10:45:33

ANo.2

エラー内容から、fetchの処理にurlがちゃんと渡っているようですね。

一応、
ver_dump(file('rss.txt'));
のようにして、他のエラーになる部分をコメントアウトして実行してみて下さい。
これでテキストファイルを取得出来ているか確認できます。

ちゃんと配列で3つ取れていたら、原因は他の部分です。

投稿日時 - 2009-01-14 02:22:00

お礼

クォートとカンマをつけた時・とった時と両方試しましたがエラー内容は同じでした。

$mainrssarray = var_dump(file('rss.txt'));で実行しました。

とった時のエラー内容です。
array(3) { [0]=> string(32) "http://www.hoge.com/?feed=rss2 " [1]=> string(42) "http://www.hoge2.com/?xml " [2]=> string(38) "http://www.hoge3.com/index20.rdf " }
Warning: Invalid argument supplied for foreach() in /virtual/ID/public_html/ドメイン名/aaa/index.php on line 20

20行目付近のソースになります。
foreach ($mainrssarray as $url){
$rss = fetch_rss($url);
$title = $rss->channel['title'];
$title = mb_convert_encoding($title, "UTF-8", "auto");

foreach ($rss->items as $item ) {
$title = $item['title'];
$title = mb_convert_encoding($title, "UTF-8", "auto");
$title = mb_strimwidth($title, 0, 50,"…",utf8);


外部でテキストを読み込まないで
$mainrss = array (
'​http://www.hoge.com/?feed=rss2',​
'​http://www.hoge2.com/?xml',​
'​http://www.hoge3.com/index20.rdf'​
);
で処理をするとしっかりRSSを取得して表示してくれています。
すいませんがわかることがありましたらアドバイスをよろしくお願い致します。

投稿日時 - 2009-01-14 05:26:41

ANo.1

テキストファイルはちゃんと実行するphpと同階層にありますか?
テキストファイルの置き場所を色々変えてみて下さい。

投稿日時 - 2009-01-14 01:25:13

お礼

回答有難うございます

上記のソースを書いたindex.phpと同じ階層に置いております。

index.php
|
|
|
rss.txt

それでもだめなんです。


MagpieRSSというのを使ってrssを表示させているのですが
エラー内容が
Warning: Invalid argument supplied for foreach() in /virtual/ID/public_html/ドメイン名/aaa/index.php on line 25

Warning: MagpieRSS: Failed to fetch 'http://www.hoge.com/?feed=rss2',​ (HTTP Error: Invalid protocol "") in /virtual/ID/public_html/ドメイン名/aaa/rss_fetch.inc on line 238

25行目(index.php)とrss_fetch.incの238行目に問題があるみたいなんです。

外部ファイルへの呼び込み方法は私が書いた方法で問題ないのでしょうか?

投稿日時 - 2009-01-14 01:41:23

あなたにオススメの質問