php - 如何从.html文件中删除条目?

时间:2017-05-22 19:47:39

标签: php file logout

我有一个文件online.html。该文件应该存储站点上在线的所有当前用户的名称。该文件可能如下所示:

<p>python-b5</p>
<p>Other user</p>

它们添加了如下代码:

$fp = fopen("online.html", 'a');
fwrite($fp, "<p>" . $_SESSION ['name'] . "</p>");
fclose($fp);

当用户退出时,我想删除online.html中用户的条目。但是,我无法弄清楚如何实现它。我该如何删除条目?

2 个答案:

答案 0 :(得分:1)

使用HTML文件作为数据库的想法将遇到严重的问题。 有两个大问题。

  1. 确保在任何给定时间只有一个进程更新文件。 如果有多个进程同时更新文件,则该文件将损坏或无法记录所有更新。

  2. 找到要删除的右行。您将需要一种方法来明确标识要删除的行。

假设您有某种类型的用户ID,则可以将其放入html中。

<!-- BEGIN -->
<p data-id="1">Promethus</p>
<p data-id="2">Orpheus</p>
<p data-id="99">Tantalus</p>
<p data-id="11895">Marcus</p>
<!-- END -->

删除行。

// WARNING ! This function can ONLY be called by one process at a time.
function deleteLine($file, $id)
{
    $tmpfile = $file . '.tmp';
    $fp = fopen($file, 'r');
    $fpout = fopen($tmpfile, 'w');

    while ( $line = fgets($fp, 1000) ) {
        // only write lines that are not the id we are searching for
        if ( ! preg_match("/data-id=\"$id\"/", $line) {
            fwrite($fpout, $line . "\n");
        }
    }
    fclose($fp); fclose($fpout);
    rename($tmpfile, $file);
}

答案 1 :(得分:0)

为什么你想把用户的在线状态写成静态文件?

通常,您在users表中提供某种last_activity时间戳,可以在每次请求时更新。

然后,您可以说在过去5-10分钟内具有last_activity时间戳的每个用户都被视为在线 - 否则他将离线。

如果你真的想保留那个静态文件结构,你可以使用DOMDocument php扩展来解析页面中静态文件的DOM,找到你想要删除的条目。