テキストファイルの読み込みとファイルポインタについて質問です。
テキストファイルの読み込みとファイルポインタについて質問です。
最近PHPを勉強し始めました。
fgets()とfseek()についてわからないことがあるので教えて頂けないでしょうか。
現状以下のテキストとPHPファイルを用意しています。
PHPに2行目のbを表示させたいのですが、思ったように表示をさせることができません。
fgets()は"現在のファイルポインタから次の1行を取得"
fseek()は"ファイルポインタを指定したバイト数分移動する"と調べてわかりました。
この二つを使って2行目を指定してbを表示したいのですがうまく表示されて困っています。
test.phpのコメントの★の部分がわからない箇所になります。
おそらく根本的な考え方が間違っていると思うのですが…いろいろ調べたのですがわかりませんでした。
申し訳ありませんがご教授願えないでしょうか。
-----------------
new.txt
-----------------
a
b
c
d
e
-----------------
-----------------
test.php
-----------------
<?PHP
$new_file = 'new.txt';
$fpt = fopen($new_file,'r');
// ファイルオープン直後のポインタ位置
echo '現在の位置=行指定'.ftell($fpt).'<br>';
print fgets($fpt).'<br>';
// ポインタを5進める
fseek($fpt,5);
echo '現在の位置=行指定'.ftell($fpt).'<br>'; // ポインタの位置確認
print fgets($fpt).'<br>'; // ★ここでeを表示したい
// 現在の位置からポインタを3戻す
fseek($fpt,-3,SEEK_CUR);
echo '現在の位置=行指定'.ftell($fpt).'<br>'; // ★行指定が5-3なので2に…ならないです。
print fgets($fpt).'<br>';
// ポインタを先頭へ
rewind($fpt);
echo '現在の位置=行指定'.ftell($fpt).'<br>'; // ポイントが先頭にきたか確認
print fgets($fpt).'<br>';
// ポインタを最後へ
fseek($fpt,0,SEEK_END);
echo '現在の位置=行指定'.ftell($fpt).'<br>'; // ★new.txtはabcdeの5行なので5になると思いきや18に…
print fgets($fpt).'<br>';
fclose($fpt); // ファイルを閉じる
?>
-----------------
-----------------
実行結果
-----------------
現在の位置=行指定0
a
現在の位置=行指定5
現在の位置=行指定3
b
現在の位置=行指定0
a
現在の位置=行指定18
お礼
表示される様になりました。 いつの間にかチェックを外していたようです。 ありがとうございました。