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

win PHPに関して です

?あるphpファイルの1行目を読み込む方法を教えてください。あるphpファイルの3行目を読み込む方法を教えてください

例えばあるphpファイルをaaa.phpとします。
-------
handaingagagaca
daiirmandagaada
laixngag
rmmmmmmsaiidafa
-------
といった具合に4行あるとします。
行で取り出すための設定を教えて下さい
※行でとりだすさいに<br>タグの設定は必用でしょうか?
行の終わりに<br>タグで改行必要でしょうか?

●質問者: rrr3
●カテゴリ:インターネット ウェブ制作
✍キーワード:aaa PHP WIN タグ ファイル
○ 状態 :終了
└ 回答数 : 6/6件

▽最新の回答へ

1 ● いのくに
●35ポイント
<?php
$handle = @fopen("aaa.php", "r");
if ($handle) {
$c = 1;
while (!feof($handle)) {
$buffer = fgets($handle, 4096);
if($c == 1)$answer1 = $buffer;
if($c == 3)$answer3 = $buffer;
$c++;
}
fclose($handle);
}
?> 

これで $answer1 には 1 行目が、$answer3 には 3 行目が入ります。


参考 http://jp.php.net/manual/ja/function.fgets.php

◎質問者からの返答

どうもです。ありがとうございます。

ただ初心者でまだよくわかりません・・

$c = 1

なんじゃないですか?

$c が3になるのでしょうか?

feofとは?

もう少しわかり易く解説して頂ける方いますか?


2 ●
●35ポイント
<?php

$read_line_array = array(1,5); // 表示したい行を配列に格納
$counter = 1; // 行数カウント用変数

// ファイルを操作するためのファイルハンドル取得
$handle = fopen("./aaa.php","r");

// ファイルハンドルが正しく取得できている(空でない)場合のみ処理を実行
if ($handle) {
 // feofでファイルポインタが終端に達しているかチェック
 // 以下ではfeofの前に否定演算子 ! を指定しているのでファイルが終端に達していない間、while内の処理を実行
 while (!feof($handle)){
 // fgets()で $buffer に1行分(以下では4096バイト以下を想定)を読み込む
 $buffer = fgets($handle, 4096);
 // 行数カウント用変数の値が表示したい行を設定した配列に含まれるかを in_array() で確認
 // 含まれる場合のみ表示
 if ( in_array($counter, $read_line_array) ) {
 // ブラウザで表示する場合、適切にエスケープし、<br /> で改行
 echo htmlspecialchars($buffer,ENT_QUOTES) . "<br />";
 // ブラウザで表示しない場合は、そのまま表示
 // echo $buffer;
 }
 $counter += 1; // 行数カウント用変数をインクリメント
 }
}

?>

aaa.phpは何をするためのプログラムですか。

また、"行で取り出す"とはどのようなイメージですか。

(HTMLとして表示するのであれば、brタグは必要ですが。)

何をしたいのかをもう少し明確にされると、より適切な回答がつくと思います。

[参考URL]

おせっかいかもしれませんが、分からないことはマニュアルで調べる癖もつけた方が良いと思います。


3 ● kidd-number5
●10ポイント

file関数を使うと行ごとに配列で取得できます。

http://jp.php.net/manual/ja/function.file.php

<?php
$lines = file("aaaa");
echo $lines[0]; // 一行目
echo $lines[2]; // 三行目
?>

出力をHTML上で改行したように見せたい場合はbrなどの改行が必要になりますが、元のファイルには必要ないです。


4 ● いのくに
●10ポイント
<?php
$handle = @fopen("aaa.php", "r");
if ($handle) {
$c = 1;
while (!feof($handle)) {
$buffer = fgets($handle, 4096);
if($c == 1)$answer1 = $buffer;
if($c == 3)$answer3 = $buffer;
$c++;
}
fclose($handle);
}
?> 

$c = 1

なんじゃないですか?

$c が3になるのでしょうか?

feofとは?

$C++;

とは

$c = $c + 1; 

と同じ意味で、$c が 1ずつ増加していきます。つまり $c が行番号にあたります。


feof は http://jp.php.net/manual/ja/function.feof.php に記載の通り、

feof ? ファイルポインタがファイル終端に達しているかどうか調べる

説明

bool feof ( resource handle )

ファイルポインタが EOF に達しているかまたはエラー (ソケットタイムアウトを含みます) の場合に TRUE 、 その他の場合に FALSE を返します。

です。


5 ● nandedarou
●10ポイント

file関数で中身を配列としてとりだすことができます。

$data = file('aaa.php');

file関数で取り出したデータには、改行文字が含まれるので、それをとり除きたい場合は、trim関数をしようするとよいでしょう。つぎのようにすると一気に全行の改行文字をとり除きます。

foreach( $data as $key => $value ){
 $data[$key] = trim($value);
}

1行目の表示

print($data[0]);

3行目の表示

print($data[2]);

さて改行についてですが、いま3つの方法が思いつきます。私は、方法1がお勧めです。

方法1

各行の終わりに、<br>を出力する。

方法2

各行の終わりに、print("\n");として改行文字を出力し、表示したい部分全体を<pre>と</pre>で囲む
※file関数で取り出した各行のデータには、改行文字が含まれているので、trim関数で除去しなかった場合、print("\n");は不要です。

方法3

コードの最初に次のようなヘッダーを設定し、ブラウザーがhtmlとして解釈しないようにする。
header ("Content-Type: text/plain; charset=Shift_JIS");
※Shift_JISの部分は、うまくいかなかったら、EUC-JPに変更して見てください。

ダミーURL

http://q.hatena.ne.jp/answer


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


●質問をもっと探す●



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