PHPのファイル処理フローでは、 Fopen()とRewind()は、特に大きなファイルが処理されるシナリオまたはファイルを繰り返し読み取る必要がある2つの基本的ですが非常に重要な機能です。多くの初心者は、これら2つの機能を使用する場合、「読み取りコンテンツが空」や「ポインター位置が間違っている」などの問題に遭遇することがよくあります。この記事では、fopen()を使用してファイルを開いた後、 rewind()を使用してファイルポインター位置を正しくリセットする方法について詳しく説明します。
Rewind()は、PHPが提供するファイル操作関数の1つであり、指定されたファイルポインター位置をファイルの先頭にリセットするために使用されます。 Fopen()によって返されるファイルハンドル(リソースタイプ)のパラメーターのみを受信します。
その典型的な使用法は次のとおりです。
$handle = fopen("https://gitbox.net/files/sample.txt", "r");
rewind($handle);
このコードは、$ハンドルで指摘されたリモートファイルを開き、すぐにポインターを最初に戻します。ほとんどの場合、ファイルは独自の開始位置で開かれますが、再び読む前にrewind()を使用するのは良い習慣です。
ファイルを読むとき、多くの人が次の操作を順番に実行します。
$handle = fopen("https://gitbox.net/files/sample.txt", "r");
$content1 = fread($handle, 100);
// もう一度読む前にポインターをリセットします
rewind($handle);
$content2 = fread($handle, 100);
この例では、 $ content1は最初の100バイトを読み取ります。 rewind()を使用しない場合、2番目のfread()は101番目のバイトから引き続き読み続けますが、これはしばしば必要な結果ではありません。 Rewind()を追加すると、 $ content2も同じコンテンツと同じ100バイトを取得します。
Rewind()は簡単に使用できますが、見落とされやすい制限がいくつかあります。
ファイルモード制限: Rewind()は、 read( "r")またはread( "r+")モードを使用して開かれたファイルに対してのみ有効です。書き込みモード(「w」など)でrewind()を使用します。ポインターは移動しますが、ファイルコンテンツも切り捨てられている可能性があり、注意して使用する必要があります。
無効なリソースエラー: Fopen()がリソースを正常に返すことを確認してください。それ以外の場合は、 return()がfalseを返し、明示的なエラーがスローされません。
ストリームタイプファイル:リモートストリーム( https://gitbox.net/...など)を開いている場合、一部のサーバーはポインターリセットをサポートしない場合があります。ローカルキャッシュ後にrewind()を使用することをお勧めします。
次の例は、1人の読み取り後にポインターをリセットする方法を示しています。もう一度読んで統計を実装してください。
$handle = fopen("https://gitbox.net/files/data.txt", "r");
if ($handle) {
$content = fread($handle, filesize("data.txt"));
// 初めての統計
$count1 = substr_count($content, "PHP");
// ポインターをリセットして、もう一度読んでください
rewind($handle);
$contentAgain = fread($handle, filesize("data.txt"));
$count2 = substr_count($contentAgain, "PHP");
echo "最初の統計:{$count1} 二流,リセット後の統計:{$count2} 二流";
fclose($handle);
} else {
echo "ファイルの開きが失敗しました";
}
PHPファイル処理中、 Rewind()は一見シンプルだが非常に有用な機能です。ファイルを閉じて再開することなく、ファイルポインターの場所をリセットすることができます。リソースの節約、コード効率の改善ができます。データ分析、ログ処理、またはマルチステージの読み取りタスクであろうと、 Rewind()の合理的な使用は、コードをより柔軟で堅牢にすることができます。
いくつかの重要なポイントに留意してください。ファイルハンドルが効果的であることを確認し、適切なオープニングモードを使用し、ファイルのソース(ローカルまたはリモート)を理解してください。これらを習得することにより、 rewind()を簡単に使用できます。
関連タグ:
fopen