【问题标题】:Delete the first contents in .txt file every 30 seconds每 30 秒删除 .txt 文件中的第一个内容
【发布时间】:2014-01-12 09:01:03
【问题描述】:

我有一个文件(usernames.txt),其中包含我网站成员的每个用户名,当他们提交用户名时,它将保存在“usernames.txt”中,问题是那里有很多用户提交每天的用户名,我想要一个php代码或每隔30秒自动删除第一个(顶部)用户名的东西(即使每分钟提交超过20个用户名,我需要的脚本也会生成“usernames.txt”文件更小,这将使我的服务器更快。:) 如果有人拥有或知道我正在谈论的脚本,那就太好了。 :) 谢谢

【问题讨论】:

  • 为什么要记录尝试然后删除它们?他们有备份吗?如果是这样,您是否可以不将所有内容都登录到过去 30 秒期间生成的时间设置文件名中,例如 usernames-20140110-121500.txt
  • 如果您想获得帮助,请正确解释您想要实现的目标
  • Usernames.txt 只是一个示例,但我正在谈论的文件接近用户名(该文件有我的用户访问令牌)但在示例中,我使用“Usernames.txt”而不是Accesstokens.txt :) 我删除第一个(顶部)访问令牌的原因是它会自行过期,然后在“accesstokens.txt”(例如usernames.txt)上就没用了,它会如果文件中有过期的访问令牌,则使用户请求变慢。 :)

标签: php


【解决方案1】:

我也会真的,真的鼓励您按照@elclanrs 的建议查看http://php.net/manual/en/refs.database.php真的鼓励你。

如果做不到这一点,我什至建议尝试使用serializeunserialize,这样您就可以更快地读取和读取文件中的数据。然后,您可以使用unserialize 将数据作为数组/对象读取,对其进行操作,然后使用serialize 将其放回文件中。

进一步失败,您将不得不将文件读入内存 (file_get_contents),遍历行,删除第一行,然后将整个文件写回。或者,一次读取一行 (fopen),跳过第一行,将文件的其余部分写回临时文件 (fputs),然后交换文件 (rename)。

最后,假设你在 *nix 系统上,你可以使用类似的东西:

exec("sed '1d' {$my_file_name}", $result);
file_put_contents($my_file_name, $result);

话虽如此,您应该真正考虑使用数据库。如果你不想要一个独立的数据库,你可以使用 sqlite,它将write the database to a local file

$dbhandle = sqlite_open('db/test.db', 0666, $error);

【讨论】:

  • 我一生中使用过一次数据库,所以我很难将我的网站脚本从 php 切换到数据库脚本,换句话说:我很讨厌数据库代码:/
  • 没有时间像现在这样学习。 :-) 但是里面还有一些其他的建议,可能会有所帮助。
猜你喜欢
  • 1970-01-01
  • 2023-03-15
  • 2021-07-14
  • 2012-03-08
  • 2021-05-01
  • 2014-12-24
  • 2019-10-21
  • 2012-12-09
  • 1970-01-01
相关资源
最近更新 更多