我的网站上有一个名为“usernames.txt”的.txt文件。在该文件中,我的网站成员有用户名,每当新成员在我的网站上提交用户名时,它都会保存在“usernames.txt”文件中。
因为该文件每小时变大,所以我必须自己删除旧的用户名(顶部=最旧的)。这很糟糕,因为当我在学校时,我无法访问我的笔记本电脑,所以我无法删除用户名,这会导致我的服务器出现问题。 (我很难解释原因,但确实让我的网站变慢了。)
我想要的是一个脚本或PHP代码或者自动删除旧用户名的东西(比如说前面的前40个用户名)并将新的用户名保存在文件中(假设底部有30个用户名) “usernames.txt”文件。
或者,我可以使用一个脚本,每隔30分钟删除第一个用户名(在顶部)。因此,只有新用户名将保存在“usernames.txt”中。我知道这个问题听起来很奇怪,但重点是让我的服务器更快。
我网站上的文件实际上并没有被称为“usernames.txt”,但这对于文件的内容是微不足道的。我网站上的文件保存用户访问令牌(Facebook Graph thingy)但在我给它的例子中是Usernames not Access Tokens。 (因为大多数人甚至不知道Access Token是什么,但希望每个人都知道用户名是什么。)
答案 0 :(得分:0)
将其存储在会话变量中,并在登录时请求它。
然后,您不必将其存储在与所有其他用户的信息混合的文本文件中,可能会导致冲突和I / O块(服务器请求正在等待读/写该文件时延迟。)
如果您在任何给定点拥有大量用户(例如数十万 - 数百万),您可以担心RAM使用情况。
是的,其他人都提到数据库也是一个有用的选择。对于这种特殊情况,我建议 MongoDB 。
答案 1 :(得分:0)
我假设每个用户都在自己的行上。
您可以将array_slice
用于此目的。然后,您可以根据切片值重写文件。
$filepath = "usernames.txt";
// convert file to array
$file = file($filepath);
// get first 40 elements
$file = array_slice($file, 0, 40);
// rewrite usernames file
file_put_contents($filepath, implode("", $file));
如果你的服务器上有cron,你可以随时添加cron job来自动处理这个脚本。
编辑:
请尝试使用此脚本。
$filepath = "usernames.txt";
// reverse array to get first elements at the top; convert file to array
$file = array_reverse(file($filepath));
// get first 40 elements
$file = array_slice($file, 0, 40);
// reverse array back; rewrite usernames file
file_put_contents($filepath, implode("", array_reverse($file)));
EDIT2:
$file = file($filepath);
if(in_array($submittedUsername, $file)) {
$i = array_search($submittedUsername, $file);
unset($file[$i]);
}
// then save username to the file