使用PHP替换平面文件数据库中的一行

时间:2012-10-04 18:15:04

标签: php replace flat-file

关于这个类似主题有很多不同的主题,但我还是无法完全理解我的问题的解决方案。

我想做的很简单,我有一个平面文件数据库,数据存储如下 -

$username:$worldLocation:$resources

问题是我希望有一个提交数据html页面,根据使用php搜索术语来更新此行

search db for - $worldLocation

if $worldLocation found

replace entire line with $username:$worldLocation:$updatedResources

我知道应该有一个相当简单的方法来完成这项工作,但我现在无法弄清楚,我会继续尝试,因为这篇文章已经完成,但如果你知道我可以使用的方式,我会很大感谢帮助。

谢谢

5 个答案:

答案 0 :(得分:1)

我一直很喜欢c,以及从c。

进入php的功能

结帐fscanffprintf

这些将使您在阅读格式写作时更轻松。比如说:

$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)

  1. 你喜欢艰难的方式,所以就这样....
  2. 使每条线的长度相同。添加空格,制表符,大写X等以填补空白
  3. 当您想要更换线路时,找到它并且因为每条线路都是固定长度,您可以替换它。
  4. 为了速度和减少麻烦,使用数据库(甚至是SQLLite)

答案 2 :(得分:0)

如果您致力于平面文件,最简单的方法是遍历每一行,编写一个新文件&改变匹配的那个。

是的,它很糟糕。

我强烈建议切换到“正确”的数据库。如果您担心资源或运行服务器的复杂性,您可以查看SQLite或Berkeley DB。这两个都使用一个“只是一个文件”的数据库,消除了安装和维护数据库服务器的问题,但你仍然可以快速和轻松搜索,替换和删除单个记录。如果由于其他原因仍然需要平面文件,则可以轻松编写一些导入/导出例程。

另一个有趣的可能性,如果你想要有创意,那就是将 filesystem 看作数据库。为每个用户提供一个目录。在每个目录中,都有一个位置文件。在每个文件中,更新资源。这意味着,要插入行,只需写入新文件即可。要更新文件,只需重写一个文件即可。删除用户只是在编目。当然,将整个事情扼杀到内存中会有更多的开销。

解决问题的其他方法可能是使您的平面文件只写,因为附加到文件的末尾是一项微不足道的操作。然后创建第二个文件,列出读取平面文件时应忽略的“死”行号。类似地,您可以轻松地“X”现有行(这也比尝试更新可能长度不同的文件中的行要容易得多)并将新数据追加到最后。

这两个想法并不是真正意义上的实用解决方案,而是向他们展示解决问题的方法总是不止一种。

答案 3 :(得分:0)

好的....几个小时的工作..这个例子对我来说很好... 我打算编写一个编辑工具...并将其用于密码更新.. 招! 此页面不仅会发送邮件并发送给用户(抱歉,地址被乱码以避免 使用新密码发布附加代码...但是它也会为thew用户编辑条目 然后将所有文件信息重新写入新文件... 完成后,它显然会交换文件名,将旧文件存储为usuarios_old.txt。

在这里获取代码(对不起,stackoverflow对代码发布非常挑剔)

https://www.iot-argentina.xyz/edit_flat_databse.txt

答案 4 :(得分:-1)

这就是您所在的位置:

update `field` from `table` set `field to replace` = '$username:$worldlocation:$updatesResources' where `field` = '$worldLocation';