win PHPに関して です


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

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

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2007/03/07 17:38:51
  • 終了:2007/03/14 17:40:03

回答(6件)

id:inokuni No.1

いのくに回答回数1343ベストアンサー獲得回数212007/03/07 17:50:39

ポイント35pt
<?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

id:rrr3

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

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

$c = 1

なんじゃないですか?

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

feofとは?

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

2007/03/07 18:14:13
id:bonlife No.2

回答回数421ベストアンサー獲得回数752007/03/07 18:25:21

ポイント35pt
<?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]

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

id:kidd-number5 No.3

kidd-number5回答回数117ベストアンサー獲得回数152007/03/07 18:11:43

ポイント10pt

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

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

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

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

id:inokuni No.4

いのくに回答回数1343ベストアンサー獲得回数212007/03/07 18:24:25

ポイント10pt
<?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 を返します。

です。

id:nandedarou No.5

nandedarou回答回数230ベストアンサー獲得回数342007/03/07 18:42:44

ポイント10pt

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

id:ctrl-v No.6

ctrl-v回答回数289ベストアンサー獲得回数152007/03/08 03:46:50

ポイント10pt

あまりスマートなやり方ではありませんが

$array = file("aaa.php");
$ans1 = $array[0];
$ans3 = $arrya[2];

file関数はファイルを配列に読み込みます。

よって、1行目を表示したいときは配列の「0」番(配列は0から始まるから)を、3行目を表示したいときは「2」を指定すればいいのです。

http://php

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません