Изкарване на последни редове от файл?

nogravity

Registered
Здравейте туристи,

Правя един чат който записва всички постове от файл. Въпроса ми е, как мога да изкарам,, да кажем последните 20 реда от файла. Знам че функцията която взима редове от файл е @fgets, но до колкото съм запознат при нея трябва да зададеш и от кой ред да започва да брои редовете, а това не ми върши работа, защото в моя файл постоянно се добавят нови редове...

Та някакви идеи? :)
 
Ето идеята:

Код:
<?php
$fail = "file.txt"; // файла от който ще четем
$redove = 20; // последните колко реда да вземем


$file = file($fail);
for ($i=(count($file) - $redove);$i<count($file);$i++)
{
	echo $file[$i]."<br />";
}
?>
 
HunteR каза:
Ето идеята:

Код:
<?php
$fail = "file.txt"; // файла от който ще четем
$redove = 20; // последните колко реда да вземем


$file = file($fail);
for ($i=(count($file) - $redove);$i<count($file);$i++)
{
	echo $file[$i]."<br />";
}
?>

Мерси, това работи, но сега проблема е друг. Понеже чата се презарежда автоматично и използвам jquery за това при презареждане, то изкарва пак цялата информация. Та как мога да направя това и в в ajax кода ми. Ето го и него:
Код:
function loadLog(){
	$.ajax({
		url: "chat.html",
		cache: false,
		success: function(html){       
			$("#chatbox").html(html);
		},  
	});  
}
setInterval (loadLog, 2500);
 
Не. МОжеш да го направиш .php и да сложиш кода, който ти дадох. Няма ли да стане?
 
HunteR каза:
Не. МОжеш да го направиш .php и да сложиш кода, който ти дадох. Няма ли да стане?

Ами това е че в този html се записва информацията, а във друг файл я изкарвам.
 
Добре мисля че измислих друго решение за което не е нужно да променям и js кода, но и тук имам затруднения. Въпроса ми е, има ли функция, която изтрива ред/редове от даден файл?
 
Хмм, търсих доста из чичо гугъл и като гледам май няма да стане моята, защото това ще e доста трудно... Мислех си да проверява файла, дали има повече от 20 реда и ако е така да го отваря и изтрива първия ред, обаче проблема е, че незнам как с @fgets да взема точно първия ред и после как да го премахна целия, защото с preg_match ще мога само да го изтрия, но ще остане празно място.

Ако някой има идеи как ще стане, моля да пише в темата, пък и аз ще го мисля...
 
Не знам защо си се ориентирал към fgets след като file е много по-удобна за работа с редове:

Код:
$fail = "file.txt";
$file = file($fail);
$redove = count($file); //Броя редове
if($redove > 20) {
  $text = "";
  for($i = 20; $i >= 0; $i--) {
    $red = ($redove - $i);
    $text .= $file[$red];
  }
}

От там $text можеш да го запишеш във файла така:

$fp = fopen($fail, "r+");
fwrite($fp, $text);
 
raiden каза:
Не знам защо си се ориентирал към fgets след като file е много по-удобна за работа с редове:

Код:
$fail = "file.txt";
$file = file($fail);
$redove = count($file); //Броя редове
if($redove > 20) {
  $text = "";
  for($i = 20; $i >= 0; $i--) {
    $red = ($redove - $i);
    $text .= $file[$red];
  }
}

От там $text можеш да го запишеш във файла така:

$fp = fopen($fail, "r+");
fwrite($fp, $text);

Стана! Мерси много, че се отзова и също мерси и за съвета :) Получаваш точката, макар че и HunteR също ми помогна доста :)
 

Back
Горе