mysql—从php中的日志文件中删除存储在数组中的内容

k3bvogb1  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(277)

我从一个日志文件中提取了一些数据并将其放入一个数组中(我们称之为 $line_content ). 我将数组中的前15行复制到另一个数组中( $line_content15 ). 我想从日志文件中删除这15行。我该怎么做?我尝试使用str\u replace,如下代码片段所示:

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

任何意见都会有帮助。谢谢您!

k5hmc34c

k5hmc34c1#

正如@user3783243所评论的,我需要内爆数组并使用 array_splice($imploded_content,$initial_line_number,$last_line_number) ;.
在这种情况下, $initial_line_number=0 以及 $last_line_number=15 .
更新:
我还需要更改php访问和修改文件的权限。

icomxhvb

icomxhvb2#

考虑到日志文件通常会变得非常大,那么在内存中尝试这样做并不是一个好的解决方案。此外,考虑到日志文件通常是审计跟踪的一部分,因此不应修改它们。但假设有正当理由。。。。。

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;
 }

您可能需要在上面的代码中添加额外的错误处理。这可以通过一个打开的文件来实现,但是很快就会变得混乱。

相关问题