2012-10-22 4 views
2

Как поставить ограничение для записи в файл, если он ударил предел затем удалить последнюю строку ..PHP файл запись - не более строки

В качестве примера здесь файл:

Line 3 
Line 2 
Line 1 

я хотите, чтобы максимальная строка была только для 3-х строк. Поэтому, когда я пишу новую строку, используя любые функции append, она удаляет последнюю строку. Скажем, я только что написал новую строку (строка 4) .. поэтому она переходит к последней и удалите его, результат должен быть:

Line 4 
Line 3 
Line 2 

А для новой написанной линии (линия 5):

Line 5 
Line 4 
Line 3 

числовых строки не требуются, я просто хочу, чтобы удалить последнюю строку, если есть новая добавлена ​​строка через дополнительную функцию дописать (file_put_contents/FWRITE) и максимум его на 3 или определенное число я даю

ответ

3

Вы можете попробовать

$max = 3; 
$file = "log.txt"; 
addNew($file, "New Line at : " . time()); 

Функция Используется

function addNew($fileName, $line, $max = 3) { 
    // Remove Empty Spaces 
    $file = array_filter(array_map("trim", file($fileName))); 

    // Make Sure you always have maximum number of lines 
    $file = array_slice($file, 0, $max); 

    // Remove any extra line 
    count($file) >= $max and array_shift($file); 

    // Add new Line 
    array_push($file, $line); 

    // Save Result 
    file_put_contents($fileName, implode(PHP_EOL, array_filter($file))); 
} 
+0

этот работает отлично, но он добавляет снизу, я хочу добавить новые строки сверху, я попробовал array_unshift, но, похоже, не работает правильно – Osa

+0

Вам все еще нужно решение? – Baba

+0

нет, все в порядке, спасибо .. если у вас есть время, вы можете добавить добавление сверху, а не снизу? – Osa

1

Вот один из способов:

  1. Используйте file() читать строки данного файла в массив
  2. Использование count(), чтобы определить, есть ли в массиве более 3 элементов. Если это так:
    1. Удалить последний элемент массива с array_pop()
    2. Использование array_unshift() для добавления элемента (новая линия) в передней части массива
    3. Переписать файл со строками массива

Пример:

$file_name = 'file.txt'; 

$max_lines = 3;    #maximum number of lines you want the file to have 

$new_line = 'Line 4';    #content of the new line to add to the file 

$file_lines = file($file_name);  #read the file's lines into an array 

#remove elements (lines) from the end of the 
#array until there's one less than $max_lines 
while(count($file_lines) >= $max_lines) {  
    #remove the last line from the array 
    array_pop($file_lines); 
} 

#add the new line to the front of the array 
array_unshift($file_lines, $new_line); 

#write the lines to the file 
$fp = fopen($file_name, 'w');   #'w' to overwrite the file 
fwrite($fp, implode('', $file_lines)); 
fclose($fp); 
+0

Вы можете показать пример – Osa

+0

Как правило, я бы никогда этого не делал, но здесь вы идете. не протестировали его, но это основная идея. я изначально дал вам довольно четкий пошаговый процесс - в следующий раз, почему бы не попытаться выяснить это самостоятельно, тогда задайте другой вопрос, если вы застряли? это способ учиться. – sgroves

0

Попытка й является.

<?php 

// load the data and delete the line from the array 

$lines = file('filename.txt'); 
$last = sizeof($lines) - 1 ; 
unset($lines[$last]); 

// write the new data to the file 

$fp = fopen('filename.txt', 'w'); 
fwrite($fp, implode('', $lines)); 
fclose($fp); 

?> 
+0

он удаляет только последнюю строку, я хочу продолжать писать до тех пор, пока она не достигнет максимума, если max hit, то удалите последнюю строку и добавьте новую сверху – Osa

+0

да, вы можете использовать переменную $ last, чтобы проверить это. $ last содержит количество строк в файле. Так что, если ваш максимум равен 3, вы можете использовать if ($ last == 3) {// удалить строку и добавить новую строку} else {// добавить новую строку} –

+0

@Osa, это сработало для вас? –

0

Modified из Baba's ответа; этот код будет записывать новую строку в начале файла и будет прервать последний, чтобы сохранить всегда 3 строки.

<?php 
function addNew($fileName, $line, $max) { 
    // Remove Empty Spaces 
    $file = array_filter(array_map("trim", file($fileName))); 

    // Make Sure you always have maximum number of lines 
    $file = array_slice($file, 0, --$max); 

    // Remove any extra line and adding the new line 
    count($file) >= $max and array_unshift($file, $line); 

// Save Result 
file_put_contents($fileName, implode(PHP_EOL, array_filter($file))); 
} 

// Number of lines 
$max = 3; 
// The file must exist with at least 2 lines on it 
$file = "log.txt"; 
addNew($file, "New Line at : " . time(), $max); 

?> 
Смежные вопросы