3

ファイルの内容を2回出力する以下のコードを書きました。しかし、それは一度だけでした。何故ですか?

テキストファイルの内容は次のとおりです。

My name is Sam. Sam I am.
My name is Chris and Chris I am.
The brown fox jumped over the fence.

コードは次のとおりです。

<?php
$file = "files/info.txt";
$handle = fopen($file, "rb");
echo fread($handle, filesize($file));
echo fread($handle, filesize($file));
?>

出力:

"My name is Sam. Sam I am. My name is Chris and Chris I am. The brown fox jumped over the fence."
4

3 に答える 3

6

fread() を呼び出すとファイルが「使い果たされる」ため、再度 fread() を実行するには、rewind($handle) を使用して読み取りポインターをファイルの先頭に戻す必要があります。

于 2013-02-22T04:33:05.453 に答える
1

最初のfread()では、ファイル ポインタがファイルの末尾に移動するため、2 回目は何も出力されません。次のコードを実行すると、わかるようになります。

<?php
$file = "info.txt";
$handle = fopen($file, "rb");
echo fread($handle, filesize($file)-10);
print "-----";
echo fread($handle, filesize($file));
?>
于 2013-02-22T04:46:44.467 に答える
0

これは、そのハンドルでコンテンツ全体を既に読んでいるためです。ハンドルはドキュメントへのポインタです。ファイルの最初のバイト (たとえば最初の 10 バイト) だけを読み取る場合は、次のようになります。

fread($handle, 10);

次に fread() を呼び出すと、中断したところから開始されます。

あなたの例では、最初に fread() を呼び出すときにファイルサイズを使用します。これにより、ポインターはファイルの最後を指したままになります。次に fread を呼び出すと、返すものが残っていないため、「エコー」エコーは何も返されません。

これがお役に立てば幸いです。php.net の詳細については、php ドキュメントの fread() およびその他のファイル処理関数を参照してください。

于 2013-02-22T04:40:18.823 に答える