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

问题描述 投票:4回答:5

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

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

$username:$worldLocation:$resources

问题是我希望有一个提交数据的html页面,该页面将根据使用php搜寻该词来更新此行

search db for - $worldLocation

if $worldLocation found

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

我知道应该有一个相当简单的方法来完成此操作,但目前无法解决,我将继续尝试,因为这篇文章尚待解决,但是如果您知道我可以使用的方法,我将不胜感激帮助。

谢谢

php replace flat-file
5个回答
1
投票

我一直很喜欢c,以及c带来的php函数。

检出fscanffscanf

这些将使您以格式阅读文章时的生活更加轻松。就像说:

fprintf

而且,没有避免fprintf的性能解决方法。您必须这样做。

这是您所能达到的最高效率。因为您最有可能使用本机c代码,因为在这种情况下,我阅读了一些php仅将c函数包装起来的地方。


0
投票
  1. 您喜欢这样的艰难方式。...
  2. 使各行具有相同的长度。添加空格,制表符,大写的X等以填充空格
  3. 当您要替换线时,找到它,并且由于每条线的长度都是固定的,因此您可以替换它。
  4. 为了提高速度并减少麻烦,请使用数据库(甚至是SQLLite)

0
投票

如果您致力于平面文件,最简单的事情是遍历每一行,编写一个新文件并更改匹配的文件。

是的,很烂。

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

[如果您想发挥创造力,另一个有趣的可能性是将filesystem视为数据库。给每个用户一个目录。在每个目录中,都有一个位置文件。在每个文件中,更新资源。这意味着,要插入一行,您只需写入一个新文件。要更新文件,只需重写一个文件。删除用户只是在破坏目录。当然,将整个过程都存储到内存中还需要更多的开销。

解决该问题的其他方法可能是将平面文件设置为只写,因为将附加到文件末尾是微不足道的操作。然后,您创建另一个文件,该文件列出了在读取平面文件时应忽略的“无效”行号。同样,您可以轻松地“ X”出现有的行(这再次比尝试更新文件中不同长度的行要容易得多)并将新数据附加到末尾。

[后两个想法并不是真正的实际解决方案,它们只是向您表明解决问题的方法不止一种。


0
投票

好....几个小时的工作..这个例子对我来说很好...我打算编写一个编辑工具...并将其用于密码更新..特技!此页面不仅会发送邮件并发送给用户(抱歉,地址被乱码以避免使用新密码发布附加代码...),但也会为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 }


-1
投票

这是您的位置:

reading the entire file into memory -> changing one line -> writing the entire file
© www.soinside.com 2019 - 2024. All rights reserved.