关于这个相似的主题有很多不同的主题,但是我还不能完全理解我的问题的解决方案。
我想做的很简单,我有一个平面文件db,数据存储如下-
$username:$worldLocation:$resources
问题是我希望有一个提交数据的html页面,该页面将根据使用php搜寻该词来更新此行
search db for - $worldLocation
if $worldLocation found
replace entire line with $username:$worldLocation:$updatedResources
我知道应该有一个相当简单的方法来完成此操作,但目前无法解决,我将继续尝试,因为这篇文章尚待解决,但是如果您知道我可以使用的方法,我将不胜感激帮助。
谢谢
如果您致力于平面文件,最简单的事情是遍历每一行,编写一个新文件并更改匹配的文件。
是的,很烂。
我强烈建议切换到“适当的”数据库。如果您担心资源或服务器运行的复杂性,可以查看SQLite或Berkeley DB。两者都使用“只是文件”的数据库,消除了安装和维护数据库服务器的问题,但是您仍然可以快速轻松地搜索,替换和删除单个记录。如果由于其他原因仍需要平面文件,则可以轻松编写一些导入/导出例程。
[如果您想发挥创造力,另一个有趣的可能性是将filesystem视为数据库。给每个用户一个目录。在每个目录中,都有一个位置文件。在每个文件中,更新资源。这意味着,要插入一行,您只需写入一个新文件。要更新文件,只需重写一个文件。删除用户只是在破坏目录。当然,将整个过程都存储到内存中还需要更多的开销。
解决该问题的其他方法可能是将平面文件设置为只写,因为将附加到文件末尾是微不足道的操作。然后,您创建另一个文件,该文件列出了在读取平面文件时应忽略的“无效”行号。同样,您可以轻松地“ X”出现有的行(这再次比尝试更新文件中不同长度的行要容易得多)并将新数据附加到末尾。
[后两个想法并不是真正的实际解决方案,它们只是向您表明解决问题的方法不止一种。
好....几个小时的工作..这个例子对我来说很好...我打算编写一个编辑工具...并将其用于密码更新..特技!此页面不仅会发送邮件并发送给用户(抱歉,地址被乱码以避免使用新密码发布附加代码...),但也会为thew用户编辑条目然后将所有文件信息重新写入新文件...完成后,它显然会交换文件名,将旧文件存储为usuarios_old.txt。
在这里获取代码(对不起,stackoverflow对代码发布非常挑剔)
$filehandle = fopen("file.txt", "c");
while($values = fscanf($filehandle, "%s\t%s\t%s\n")){
list($a, $b, $c) = $values;
// do something with a,b,c
}
这是您的位置:
reading the entire file into memory -> changing one line -> writing the entire file