Я извлек некоторые данные из файла журнала и поместил их в массив (назовем его $line_content
). Я скопировал $line_content15
15 строк из массива в другой массив ($line_content15
). Я хочу удалить/удалить эти 15 строк из файла журнала. Как я должен это делать? Я попытался использовать str_replace, как в этом фрагменте кода:
file_put_contents($filename, str_replace($line_content15 . "\r\n", "",
file_get_contents($filename)));
Любой вход был бы полезен. Спасибо!
Учитывая, что файлы журналов часто становятся очень большими, тогда попытка сделать это в памяти не является хорошим решением. Кроме того, учитывая, что файлы журналов обычно являются частью одного контрольного журнала, их не следует изменять. Но если предположить, что есть веская причина.....
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;
}
Вы можете добавить дополнительную обработку ошибок в приведенное выше. Это может быть реализовано с помощью одного открытого файла - но это может стать беспорядочным.
Как комментировал @user3783243, мне нужно было взорвать массив и использовать
array_splice($imploded_content,$initial_line_number,$last_line_number)
;
В этом случае,
$initial_line_number=0
и $last_line_number=15
.
Обновить:
Мне также необходимо изменить разрешение для PHP для доступа и изменения файла.
$line_content15
является массивом, вы не можете$line_content15
его. Вы должны взорвать его в строку.