人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPについての質問です。外部ファイルの一部を読み込んで表示するにはどうすればいいのでしょうか?

例えば別のURLの内容に
Hello World
とある場合Hello World全部を読み込むのではなくHelloだけを読み込んで表示させたいです。

今は下記の方法で全部読み込んで表示させてるので
一部だけ読み込んで表示させる方法をご存じの方は教えて下さい。

<?php
$file = file("http://読み込み先のURL");
foreach($file as $line){
echo($line);
}
?>

●質問者: wabisabi77
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:as echo Hello Hello world http://
○ 状態 :終了
└ 回答数 : 9/9件

▽最新の回答へ

1 ● ls_10_5
●16ポイント

一部を読み込んで表示させる、という状況がよく分からないので、

「『Hello World』と書いてあるファイルから各行最初の5文字を表示させる」場合としてお答えします。

最適解かは分かりませんが、私だったら以下のようにします。


<?php

$file = file("http://読み込み先のURL");

foreach($file as $line){

echo substr($line, 0, 5);

}

?>


(うまく表示されないので<>は全角にしてあります)

もう少し詳しく説明してくだされば、もっと役に立つお答えができると思います。


参考までに、Webで見られるPHPマニュアルのURLを貼っておきます。

http://www.php.net/manual/ja/index.php

◎質問者からの返答

ありがとうございます。

でも、私のやり方が悪いのか教えて頂いた方法では表示されませんでした、

もう少し説明しますと私のやり方では

スタイルシートなどのメタ情報まで読み込んでしまうのです。

具体的にいいますとRSS見たいに自動で更新情報を所得して表示したいです。

他のサイトの情報じゃなくて自分のサイトの更新情報で良いんですが。

Hello World

更新情報

2009/01/01 ここに更新情報

2008/12/31 ここに更新情報

の場合

2009/01/01 ここに更新情報

2008/12/31 ここに更新情報

だけを何とかして表示したいのですが…説明分かりにくくてすみません。


2 ● pahoo
●16ポイント

「一部」の定義が曖昧です。

たとえば、「一部」の意味が「"Hello" に一致する行」ということであれば、下記のようにします。

$file = file("http://読み込み先のURL");
$pat = "/Hello/"; //一致パターン
foreach($file as $line){
 if (preg_match($pat, $line) != 0) echo($line);
}

一致判定のために preg_match という正規表現関数を利用しています。

正規表現については、「PHPで正規表現」を参考にして頂ければと思います。

◎質問者からの返答

ありがとうございます。

プログラミング初心者なもんで何が悪いのか何も表示されませんでした。

1さんの方にもう少し詳しく回答してますので何か分かりましたら教えてください。


3 ● ls_10_5
●16ポイント

追加説明ありがとうございます。

必要な行だけ読み込む、ということは難しいので、読み込んでから表示するかを判断する、という方法でやります。

更新情報を表示したいとのことですが、更新情報を書く行の形式が決まっているなら、その形式に合わせてパターンマッチをするといいと思います。

(2番目の方の答えと同じですね)


<?php

$file = file("http://読み込み先のURL");

foreach($file as $line){

if (preg_match(/^\d{4}\/\d{2}\/\d{2}/, $line)){

echo($line);

}

}

?>


この例では、「数字4文字 / 数字2文字 / 数字2文字」で始まる行を表示するようになっています。


パターンマッチはこのページを参考にしました。

http://www.php.net/manual/ja/function.preg-match.php

◎質問者からの返答

ありがとうございます。

私が言いたい事とかなり近いことが出来そうな気がしたんですが

そのままコピペして使ったら画面が真っ白になってしまいました。

これの改善方法をご存じでしたら教えて下さい


4 ● pahoo
●16ポイント

入力にはスタイルシートやHTMLタグが含まれているということですね。

であれば、比較する前にstrip_tags関数でタグを取り除いておきましょう。

$file = file("http://読み込み先のURL");
$pat = "/\d{4}\/\d{2}\/\d{2}(.*)/"; //一致パターン
foreach($file as $line){
 $instr = strip_tags($line); //HTMLタグを取り除く
 if (preg_match($pat, $instr, $arr) != 0) echo($arr[1]);
}

上記は、更新内容のみを表示する場合です。

年月日も含めて1行分を表示したいのであれば、最後の行のif 文の後を

echo($arr[0])

に置き換えてください。


訂正

#2の回答の訂正をします。日本語が間違っていました。

×「一部」の意味が「"Hello" に一致する行」ということであれば

○「一部」の意味が「"Hello" が含まれている行」ということであれば


※設定された回答回数の上限になりました。さらにフォローが必要でしたら、コメント欄を開けていただくか、回答回数を増やしてください。

◎質問者からの返答

ありがとうございます。

こちらもコピペして使ったんですが画面は真っ白にならなかったんですが

URLから読み込みもエラーも吐かず何も変わりませんでした。

自分でコピペするくらいしかできないので何か初歩的な事で間違ってるのでしょうか?


5 ● pahoo
●16ポイント

自分でコピペするくらいしかできないので何か初歩的な事で間違ってるのでしょうか?

そうだと思います。

残念ながら、ご自身でプログラムの流れについて確認するなり、エラーの原因を検討していただけないと、アドバイスのしようがありません。


URLはダミーです。 http://q.hatena.ne.jp/


1-5件表示/9件
4.前の5件|次5件6.
関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ