どのように私はPHPで「上」ファイルリソースが現在ある行何言うことができますか?
質問
PHPを使用して、それがfopen
とfgets
を使用してファイルの内容を読み取ることが可能です。 fgets
が呼び出されるたびに、それはファイルの次の行を返します。
どのようにしてfgets
のの何行読み取るために知っていますか?言い換えれば、どのようにそれが最後の5行読みになることを知っているので、ライン6今回の内容を返す必要がありますか?私はその行番号のデータにアクセスするための方法はありますか?
(私はそれがfile
の配列にファイルの内容全体を読み取ることによって、類似した何かをすることが可能です知っているが、私はfopen
でこれを実現したいと思います。)
解決
開いているファイルごとにメモリに保持「位置」があります。それは、自動的に/どんなファイルからあなたが行/文字を読んでいるたびに更新されます。
あなたは ftell
にしてこの位置を取得し、<とそれを修正することができますhref = "http://php.net/manual/en/function.fseek.php" のrel = "nofollowをnoreferrer"> fseek
するます:
ftellは - 現在の位置を返します。 ファイルの読み取り/書き込みポインタの
fseek - ファイルポインタを移動する
また...巻き戻しに巻き戻しを使用することができます...そのポインタの位置
のこれはあなたの行番号としての地位を得ていないが、文字番号などの位置に近いは(実際には、あなたは、ファイルの先頭からのバイト数としての地位を得ています)。あなたが行の読み取りが湯は行末文字を打つまでの文字を読み取るメッターだけである、ということがあるときます。
のBTW:私が覚えている限りでは、これらの関数は、C言語から来ている - Cで書かれているPHP自体; - )の
他のヒント
ファイルは、単に最初から最後まで読み込んだデータのストリーム、です。 OSは、あなたがそのファイルで、これまでに読んだ位置を覚えています。必要であれば、同様のアプリケーションにそうすることは非常に簡単です。 OSは、しかしバイト位置についていないラインを気遣います。
ただ、52カードを順次デッキを扱う想像してみてください。あなたは、最初のカードを手渡します。次回2.カード。あなたは3.カードを与えたいときは、もう一度最初からカウントを開始する必要はありませんか、あなただけの次の使用可能なカードを配るたし、それは第三だろうどこでも思い出します。
あなたがpreformanceの酒の実際のファイルから読み込んだデータをバッファリングしたいと思いますので、それは、ラインを読むために必要なのは、もう少し作業があるかもしれないが、それは最後のピースのオフセットを記録するためにそのはるかにそれよりはありませんあなたが配られたデータを、次の改行文字を見つけ、それらの2点間のすべてのデータをハンドオフます。
PHPやOSは、およそすべてのシステムケアは、「次の行」であることから、行番号を周りに保つためには本当の必要がありません。あなたは行番号を知りたい場合は、カウンタを維持し、それをあなたのアプリが行を読み込むたびにインクリメントます。
$lineno=0;
while (!feof($handle)) {
$buffer = fgets($handle, 4096);
lineno++; // keep track of the line number
...
}
私はそのあなたを助けることができるホブこの古いサンプルを肝炎:)
$File = file('path');
$array = array();
$linenr = 5;
foreach( $File AS $line_num => $line )
{
$array = array_push( $array , $line );
}
echo $array[($linenr-1)];
あなただけのfgets
を呼び出し、VaRの$line_number
あなたがそれを呼び出すたびに増分することができます。それはあなたにそれがオンになっている行を言うだろう。