Ben PHP dokümanlar gördüğüm yakın, fread () belirli bir uzunluk için, ama o başlamak için hangi satırı belirtmek değildir. Başka bir öneriniz?
Sen hatları keyfi uzunlukta olabilir, çünkü hat X başlayarak okumak mümkün olacak değildir. Yani çizgiler Örneğin X hat almak için okunan sayısını sayma baştan okumak zorunda kalacak:
<?php
$f = fopen('sample.txt', 'r');
$lineNo = 0;
$startLine = 3;
$endLine = 6;
while ($line = fgets($f)) {
$lineNo++;
if ($lineNo >= $startLine) {
echo $line;
}
if ($lineNo == $endLine) {
break;
}
}
fclose($f);
Evet, SplFileObject::seek
a> ile kolayca yapabilirsiniz
$file = new SplFileObject('filename.txt');
$file->seek(1000);
for($i = 0; !$file->eof() && $i < 1000; $i++) {
echo $file->current();
$file->next();
}
Bu SeekableIterator arayüzü bir yöntemdir ve fseek
ile karıştırılmamalıdır.
Ve SplFileObject iterable çünkü bunu yapabilirsiniz ile daha da kolay bir LimitIterator
a>:
$file = new SplFileObject('longFile.txt');
$fileIterator = new LimitIterator($file, 1000, 2000);
foreach($fileIterator as $line) {
echo $line, PHP_EOL;
}
Yine, bu sıfır tabanlı, bu yüzden 2001 hat 1001 bulunuyor.
Ne yazık ki, y hat çizgisinden x okumak mümkün olması için, satır sonları tespit edebilmek gerekiyordu ... ve bütün dosya taramak gerekiyor. Ancak, not performans nedenleriyle bu konuda soran konum varsayarak, aşağıdaki ile y
satırları x
alabilirsiniz:
$x = 10; //inclusive start line
$y = 20; //inclusive end line
$lines = file('myfile.txt');
$my_important_lines = array_slice($lines, $x, $y);
Bkz: array_slice
Here is the possible solution :) strong>
<?php
$f = fopen('sample.txt', 'r');
$lineNo = 0;
$startLine = 3;
$endLine = 6;
while ($line = fgets($f)) {
$lineNo++;
if ($lineNo >= $startLine) {
echo $line;
}
if ($lineNo == $endLine) {
break;
}
}
fclose($f);
?>
Eğer çizgiler arıyorsanız bu hat sonları sayısı, ofset bir bayt değil dayanır çünkü o zaman fread kullanamazsınız. Aslında satır sonlarını bulmak için dosyayı okumak zorunda, bu yüzden farklı bir işlev daha uygundur. fgets dosya line-by-line okuyacaktır. Bir döngü içinde olduğunu atmak ve yalnızca istediğiniz satırları yakalamak.
Ben de bundan korkuyordum ... ben o zaman B planı var sanırım: S
: Her AJAX isteği için ben gidiyorum
Bu topal, ve muhtemelen 10.000 + hatları dosyalar ile oldukça yavaş olacak, ama en azından geçici dosya yok ... her isteği ile kısa oluyor bu, tekrar tekrar aynı okumaktan daha iyidir sanırım?