Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP替换平面文件数据库中的一行_Php_Replace_Flat File - Fatal编程技术网

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

使用PHP替换平面文件数据库中的一行,php,replace,flat-file,Php,Replace,Flat File,关于这个相似的话题有很多不同的思路,但我还不能完全理解我的问题的解决方案 我想做的很简单,我有一个平面文件数据库,数据存储如下- $username:$worldLocation:$resources 问题是,我想有一个提交数据html页面,可以根据使用php搜索的术语更新这一行 search db for - $worldLocation if $worldLocation found replace entire line with $username:$worldLocation:$

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

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

$username:$worldLocation:$resources
问题是,我想有一个提交数据html页面,可以根据使用php搜索的术语更新这一行

search db for - $worldLocation

if $worldLocation found

replace entire line with $username:$worldLocation:$updatedResources
我知道应该有一个相当简单的方法来完成这件事,但我现在还不能弄清楚,我会继续尝试,因为这篇文章已经发布了,但是如果你知道我可以使用的方法,我将非常感谢你的帮助


谢谢你

这就是你的工作地点吗:

update `field` from `table` set `field to replace` = '$username:$worldlocation:$updatesResources' where `field` = '$worldLocation';
  • 你喜欢艰苦的生活,就这样吧
  • 使每一行的长度相同。添加空格、制表符、大写字母X等以填充空格
  • 当您要替换该行时,请找到它,因为每一行的长度都是固定的,所以您可以替换它
  • 为了提高速度和减少麻烦,请使用数据库(即使是SQLLite)

  • 我一直很喜欢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
    }
    
    此外,没有性能解决方法可以避免
    将整个文件读入内存->更改一行->写入整个文件。你必须这么做


    这是你能得到的最有效的方法。因为您很可能使用原生c代码,因为我读过一些php在这些情况下只包装c函数的地方。

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

    是啊,糟透了

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

    另一个有趣的可能性是,如果您想具有创造性,可以将文件系统视为一个数据库。给每个用户一个目录。在每个目录中,都有一个位置文件。在每个文件中,更新资源。这意味着,要插入一行,只需写入一个新文件。要更新文件,只需重写单个文件。删除一个用户只是对一个目录进行核操作。当然,把整件事都塞进内存会有一点开销

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


    这后两个想法并不是真正意义上的实用解决方案,而是告诉你解决问题的方法总是不止一种。

    好吧。。。。经过几个小时的工作…这个例子对我来说很好。。。 我打算编写一个编辑工具…并将其用于密码更新…它做到了 戏法 此页面不仅向用户发送电子邮件(抱歉…地址已编码以避免 使用新密码发布传统代码),但它也会编辑W用户的条目 并在新文件中重新写入所有文件信息。。。 完成后,它显然会交换文件名,将旧文件存储为usuarios_old.txt

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


    像往常一样。。。为什么不使用真正的数据库呢?然后阅读PHP手册:这听起来非常低效。这是一个非常简单的应用程序,可能只有100个条目。我写这篇文章是为了学习更多关于基本php的知识,我想知道是否有办法实现它。这可能不是最有效的方法,但目前我只是使用一个html输入页面,并使用php将数据写入平面文件。它是否可以像($worldLocationInput==$worlLocation)那样使用然后从
    更新
    字段
    设置
    字段以替换
    …不幸的是,我只有一门基本的php课程,正在努力边学边用。请原谅我的奇怪问题。我想可能有一种方法可以用preg_replace或类似的东西来完成它?你可以加载整个文件,用
    preg_replace
    进行jig,然后写回。相当低效。只要使用数据库,周五下午就可以休息了!如果您正在寻找平面文件数据库。只需选择一个常用字符来分隔值(如|)。您可以逐行读取文件,在“|”上逐行删除多余的空白,并使用trim()。但是我建议学习基本的SQL,所以我可能应该寻找一个不同的解决方案,只学习基本的SQL,嗯?@user1707616-学习SQL对你有好处。如果你掌握了集合论和笛卡尔积的诀窍,那就不难了。我想也许有一种方法可以用preg_replace或类似的东西来实现它?虽然这可以从理论上回答这个问题,但在这里包括答案的基本部分,并提供链接以供参考。不理解你的观点…我的帖子解决了这个问题…我提供了实际工作代码的链接(因为stackoverflow使发布变得太复杂了…4个空格缩进…等等)stackoverflow不是这样工作的。单独发布解决方案的链接是不可接受的。请参见上面的链接。使用ctrl+K缩进代码。此外,代码中充满了非英语注释,这将阻止它成为关于英语的有用答案。