4

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

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

$username:$worldLocation:$resources

问题是我想要一个提交数据 html 页面,该页面将根据使用 php 搜索术语来更新这一行

search db for - $worldLocation

if $worldLocation found

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

我知道应该有一个相当简单的方法来完成这项工作,但我目前无法弄清楚,我会继续尝试,因为这篇文章已经发布,但如果你知道我可以使用的方法,我将非常感谢你的帮助.

谢谢

4

5 回答 5

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 函数的地方。

于 2012-10-04T18:48:35.943 回答
0
  1. 你喜欢艰难的方式,就这样吧......
  2. 使每条线的长度相同。添加空格、制表符、大写 X 等以填补空白
  3. 当你想替换线时,找到它,因为每条线的长度都是固定的,你可以替换它。
  4. 为了提高速度和减少麻烦,请使用数据库(甚至 SQLLite)
于 2012-10-04T18:30:41.817 回答
0

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

是的,这很糟糕。

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

如果您想发挥创造力,另一种有趣的可能性是将您的文件系统视为数据库。给每个用户一个目录。在每个目录中,都有一个位置文件。在每个文件中,更新资源。这意味着,要插入一行,您只需写入一个新文件。要更新文件,只需重写一个文件。删除用户只是对目录进行核对。当然,将整个内容放入内存中会产生更多开销。

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

后两个想法并不是真正的实际解决方案,而是向您展示解决问题的方法总是不止一种。

于 2012-10-04T19:12:21.037 回答
0

好的....经过几个小时的工作......这个例子对我来说很好......我打算编写一个编辑工具......并将它用于密码更新......它成功了!此页面不仅使用新密码向用户发送和发送电子邮件(抱歉...为避免发布附加代码而对地址进行了编码)...而且它还为该用户编辑条目并在新文件中重写所有文件信息...完成后,它显然会交换文件名,将旧文件存储为 usuarios_old.txt。

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

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

于 2020-04-11T05:02:07.707 回答
-1

那是你的位置:

update `field` from `table` set `field to replace` = '$username:$worldlocation:$updatesResources' where `field` = '$worldLocation';
于 2012-10-04T18:25:58.480 回答