Удалить содержимое, хранящееся в массиве из файла журнала в php

0

Я извлек некоторые данные из файла журнала и поместил их в массив (назовем его $line_content). Я скопировал $line_content15 15 строк из массива в другой массив ($line_content15). Я хочу удалить/удалить эти 15 строк из файла журнала. Как я должен это делать? Я попытался использовать str_replace, как в этом фрагменте кода:

file_put_contents($filename, str_replace($line_content15 . "\r\n", "",
file_get_contents($filename)));

Любой вход был бы полезен. Спасибо!

  • 1
    Если $line_content15 является массивом, вы не можете $line_content15 его. Вы должны взорвать его в строку.
  • 0
    Ах, я вижу спасибо! @ user3783243
Теги:
file
centos

2 ответа

0

Учитывая, что файлы журналов часто становятся очень большими, тогда попытка сделать это в памяти не является хорошим решением. Кроме того, учитывая, что файлы журналов обычно являются частью одного контрольного журнала, их не следует изменять. Но если предположить, что есть веская причина.....

 function delete_lines($fname, $startline, $endline)
 {
    $tmp=tmpfile();
    $in=fopen($fname, 'r+');
    if (!flock($in, LOCK_EX, $wouldblock) || $wouldblock) {
        trigger_error("Unable to lock file");
        return false;
    }
    for ($x=0; $x<$startline; $x++) {
       fputs($tmp, fgets($in));
    }
    for ($x=0; $x<($endline-$startline); $x++) {
       fgets($in);
    }
    while (!feof($in)) {
       fputs($tmp, fgets($in));
    }
    fseek($tmp,0);
    fseek($in, 0);
    $newsize=0;
    while (!feof($tmp)) {
       $newsize+=fputs($in, fgets($tmp));
    }
    ftruncate($in,$newsize);
    fclose($in);
    fclose($tmp);
    return true;
 }

Вы можете добавить дополнительную обработку ошибок в приведенное выше. Это может быть реализовано с помощью одного открытого файла - но это может стать беспорядочным.

0

Как комментировал @user3783243, мне нужно было взорвать массив и использовать

array_splice($imploded_content,$initial_line_number,$last_line_number);

В этом случае,

$initial_line_number=0 и $last_line_number=15.

Обновить:

Мне также необходимо изменить разрешение для PHP для доступа и изменения файла.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню