关于这个类似主题有很多不同的主题,但我还是无法完全理解我的问题的解决方案。
我想做的很简单,我有一个平面文件数据库,数据存储如下 -
$username:$worldLocation:$resources
问题是我希望有一个提交数据html页面,根据使用php搜索术语来更新此行
search db for - $worldLocation
if $worldLocation found
replace entire line with $username:$worldLocation:$updatedResources
我知道应该有一个相当简单的方法来完成这项工作,但我现在无法弄清楚,我会继续尝试,因为这篇文章已经完成,但如果你知道我可以使用的方式,我会很大感谢帮助。
谢谢
答案 0 :(得分:1)
我一直很喜欢c,以及从c。
进入php的功能这些将使您在阅读格式写作时更轻松。比如说:
$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
的性能解决方法。你必须这样做。
这样可以获得最高效率。因为你很可能使用本机c代码,因为我读了一些php在这些情况下只包含c函数的地方。
答案 1 :(得分:0)
答案 2 :(得分:0)
如果您致力于平面文件,最简单的方法是遍历每一行,编写一个新文件&改变匹配的那个。
是的,它很糟糕。
我强烈建议切换到“正确”的数据库。如果您担心资源或运行服务器的复杂性,您可以查看SQLite或Berkeley DB。这两个都使用一个“只是一个文件”的数据库,消除了安装和维护数据库服务器的问题,但你仍然可以快速和轻松搜索,替换和删除单个记录。如果由于其他原因仍然需要平面文件,则可以轻松编写一些导入/导出例程。
另一个有趣的可能性,如果你想要有创意,那就是将 filesystem 看作数据库。为每个用户提供一个目录。在每个目录中,都有一个位置文件。在每个文件中,更新资源。这意味着,要插入行,只需写入新文件即可。要更新文件,只需重写一个文件即可。删除用户只是在编目。当然,将整个事情扼杀到内存中会有更多的开销。
解决问题的其他方法可能是使您的平面文件只写,因为附加到文件的末尾是一项微不足道的操作。然后创建第二个文件,列出读取平面文件时应忽略的“死”行号。类似地,您可以轻松地“X”现有行(这也比尝试更新可能长度不同的文件中的行要容易得多)并将新数据追加到最后。
这两个想法并不是真正意义上的实用解决方案,而是向他们展示解决问题的方法总是不止一种。
答案 3 :(得分:0)
好的....几个小时的工作..这个例子对我来说很好... 我打算编写一个编辑工具...并将其用于密码更新.. 招! 此页面不仅会发送邮件并发送给用户(抱歉,地址被乱码以避免 使用新密码发布附加代码...但是它也会为thew用户编辑条目 然后将所有文件信息重新写入新文件... 完成后,它显然会交换文件名,将旧文件存储为usuarios_old.txt。
在这里获取代码(对不起,stackoverflow对代码发布非常挑剔)
答案 4 :(得分:-1)
这就是您所在的位置:
update `field` from `table` set `field to replace` = '$username:$worldlocation:$updatesResources' where `field` = '$worldLocation';