我有一个文件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
中用户的条目。但是,我无法弄清楚如何实现它。我该如何删除条目?
答案 0 :(得分:1)
使用HTML文件作为数据库的想法将遇到严重的问题。 有两个大问题。
确保在任何给定时间只有一个进程更新文件。 如果有多个进程同时更新文件,则该文件将损坏或无法记录所有更新。
找到要删除的右行。您将需要一种方法来明确标识要删除的行。
假设您有某种类型的用户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,找到你想要删除的条目。