1

当用户在我的网站上注册一个帐户时,他们自己的页面被创建,称为 USERNAME.php。
每当用户名“bob”登录时,就会在 bob.php 中添加一个新行,其中包含该登录的时间、日期和 IP 地址。

我想要做的是该文件中最多有 20 行,这样文件就不会随着时间的推移变得太大。
我的第一行是“ bob的登录检索”,然后是底部的最新登录结果。所以第一行不应该被删除,但是第二行应该在每次登录时被删除(只有当行数大于 20 时)。这样做的最佳方法是什么?谢谢!

4

2 回答 2

0

我假设.php未使用扩展名,并且该文件最多有二十行。

您可以使用该file()函数按行展开文件,shift取出第一行以保存它,然后使用array_splice()提取最后 19 行,unshift将第一行返回到新数组中以获得最多 20 个条目。join它们并将它们重写回原始文件。

更好的是,将它们写入一个新文件,然后如果一切顺利,将新文件重命名为新文件。

    /**
     * @param $file    the input file
     * @param $n       total number of meaningful lines to keep (default 20)
     * @param $m       prefix lines to keep (default 1)
     *
     * @return         number of lines in case something was done
     *                 0 nothing to do
     *                 -1 file not found
     *                 -2 file not readable
     *                 -3 file not writeable
     *                 -4 write error
     *                 -8 bad parameter
     */

    function trim_file($file, $n = 20, $m = 1)
    {
            if (!file_exists($file))
                    return -1;
            if (!is_readable($file))
                    return -2;
            if (!is_writeable($file))
                    return -3;
            if ($m > $n)
                    return -8;
            $lines  = file($file);
            $num    = count($lines);

            // If file is short, no need to do anything
            if ($num <= $n)
                    return 0;

            $header = array_slice($lines, 0, $m);
            // Remove lines from 0 to ($num-($n-$m))
            // and replace them with the first $m lines
            array_splice($lines, 0, $num-($n-$m), $header);

            // Write file with new contents
            $fp = fopen($file . '.tmp', 'w');
            if (!$fp)
                    return -4;
            fwrite($fp, join('', $lines));
            fclose($fp);

            // Replace the file in one fell swoop.
            rename($file . '.tmp', $file);
            return count($lines);
    }
于 2013-04-02T21:00:46.577 回答
0

如果只有20行。将文件读取到数组并以这种方式操作会很容易。可以轻松取消设置数组元素并将总数保持在 20。然后将新信息写回文件

于 2013-04-02T21:02:10.823 回答