Как прочесть последнюю строку в файле?

emdfreeman

Новичок
Как прочесть последнюю строку в файле?

Как прочесть последнюю строку в файле (его размер может достигать до 10мб и больше)?
 

Фанат

oncle terrible
Команда форума
читать с конца кусками, пока на встретится конец строки.
 

SiMM

Новичок
Если размер строки гарантированно не превышает разумных объёмов - достаточно сделать одно чтение.
 

emdfreeman

Новичок
<?

$f=fopen("hits.dat","r"); //открываю файл для чтения

while(!feof($f)) //пока не достигнут конец файла
{
Что тут написать?
}

fclose($f);// закрываю файл

echo $x;

?>


Или я вообще не в ту степь полез?
 

nikit87

Новичок
emdfreeman
С конца читать.
А если не секрет что ты хранишь в 10 меговом файле???
 

emdfreeman

Новичок
там статистика посещения, браузер, страниц и т.п.

Вот хочу сделать, чтоб каждый 10 день он брал последнюю строку и записывал с правом перезаписи и все....и файл будет маленький....потому что будет каждый 10-й день очищаться....а я все равно её часто смотрю, мне более чем на 10 дней не надо!

-~{}~ 20.06.05 01:39:

что то у меня не фига не получается....ну ладно...спасибо всем хоть за то что увидели и попытались помочь.......
 

emdfreeman

Новичок
$f=fopen("hits.dat","r");
$x=fseek($f, 0);
fclose($f);
echo $x;


Я че то не правильно делаю.........
 

emdfreeman

Новичок
ооооо туплю.....вот что получилось.....работает....может, как то можно уменьшить?

$file = fopen("hits1.dat","r");

$i=0 ;
$lines=1 ;
if(is_resource($file)){
fseek($file,0,SEEK_END) ;
$a = ftell($file) ;
while($i <= $lines){
if(fgetc($file) == "\n"){
echo (fgets($file));
$i++ ;
}
fseek($file,$a) ;
$a-- ;
}
}
 

SiMM

Новичок
emdfreeman, тебе ещё в первом посте сказали, что и как делать. Читай блоками с конца. Для этого нужно встать ДО конца на величину блока. Если в полученном затем блоке не будет найден перевод строки - читать ещё блок ДО этого.
 

Фанат

oncle terrible
Команда форума
причём размер блоков желательно, чтобы отличался от размеров напёрстка
 

$OMEGA

Guest
А если попробовать так:
PHP:
$omega = file(your_file("hits1.dat");
$num = count($omega);
$your_text = $omega[$num-1];
echo $your_text;
 

Guest111

Guest
А нельзя ли встать через fseek на "конец":) файла, а потом с конца читать в обратной последовательности пока не встретиться символ переноса строки?
Почему это считается менее корректным вариантом?
 

Фанат

oncle terrible
Команда форума
потому, что чайной ложкой переложить килограмм сахару будет гораздо дольше, чем половником.
 

yugene

Отошел от дел
Автор оригинала: emdfreeman
Вот хочу сделать, чтоб каждый 10 день он брал последнюю строку и записывал с правом перезаписи и все....и файл будет маленький....потому что будет каждый 10-й день очищаться....а я все равно её часто смотрю, мне более чем на 10 дней не надо!
А она тебе очень нужна эта последняя строка? Нельзя файл целиком очищать, не оставляя последнюю строку?
 
Сверху