【问题标题】:Open and modify a JSON file using PHP使用 PHP 打开和修改 JSON 文件
【发布时间】:2021-12-05 07:31:39
【问题描述】:

我将使用 JSON 文件来包含指向一些帖子的链接列表,并且可以随时更新它。但是,我对与 PHP 的 fopen() 函数一起使用的模式感到困惑。这将是一个平面文件数据库,主要是为了让我在进入适当的关系数据库之前学习使用文件、PHP 和 JSON(这不是我担心使用 SQL 或类似的东西...)

我正在使用的过程是,一旦输入了博客文章,它将创建一个目录,将一个新的 index.php 文件保存到其中,其中包含让我查看页面的所有内容,然后,在哪里我目前卡住了,用标题、作者、日期和指向新创建页面的链接更新一个 JSON 文件。

基于PHP Manual,我可能想要使用三种模式。 r+w+a+

我希望使用的过程是获取 JSON 文件并将数据放入数组中。更新数组,然后将其保存回文件。

a+ 将指针放在文件末尾并且总是附加写入,所以我假设这是这种情况下最糟糕的选择,因为我不会在文件末尾添加新的 JSON 条目(我很想在 JSON 对象的开头而不是末尾插入任何新数据。

w+ 提到读写,但也截断文件 - 这是在将数据保存到文件时发生,还是在文件打开时发生?如果我在现有的 JSON 文件上使用此模式,那么我是否会在 之前读取一个空白文件,我什至可以修改数组并将其重新保存到对象中?

r+ 提到将指针放在文件的开头 - 保存数据会覆盖那里的内容还是会在现有内容之前插入数据?如果插入,如何手动清除文件,然后将新修改的数组保存到 JSON 对象中?

哪些模式最适合我想要做的事情?有没有更好的方法呢?

【问题讨论】:

  • 我会使用file_get_contents 来读取文件并使用w+ 选项来保存它。
  • “最适合”取决于您想做什么。是手动修改 JSON 结构,还是使用json_encode
  • @NicoHaase 如果手动,你的意思是我会通过记事本或 VS Code 之类的东西进入并手动添加条目,不,我可能会在代码中使用 json_encode 进行操作跨度>
  • 如果您打算使用json_encode 执行此操作,您将如何仅修改该数组的部分内容?
  • 鉴于我目前发现的情况,似乎最可行的选择是读取 JSON 文件,将其复制到变量中,对其进行修改,然后将其重新写入文件。除非有更好的方法我不知道大声笑

标签: php json fopen


【解决方案1】:

您可能应该首先阅读整个文件(例如使用file_get_contents(),然后然后使用w+ 打开它以写入新数据。(编辑:或者更确切地说,作为其他答案点出来,使用file_put_contents(),当你只进行一次写操作时,这总是更简单。)

r+ 将覆盖您正在写入的文件,但不会擦除除此之外的内容。如果您的数据总是增加大小,这应该与完全覆盖文件相同,但即使现在是这样,这也是一种假设,将来可能会弄乱您的数据。

【讨论】:

    【解决方案2】:

    如果您总是读取或写入整个文件,则根本不必使用文件句柄 - PHP 提供了一对函数 file_get_contents($file_name)file_put_contents($file_name, $content),使用起来要简单得多。

    具有各种模式的文件句柄在您处理部分文件时最有用。例如,如果您使用 CSV,您可以一次读取或写入一行,而无需一次将完整的数据集保存在内存中。或者,对于二进制文件格式,您可能知道要读取的文件中的位置,并且可以“寻找”该位置的文件句柄。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-21
      • 1970-01-01
      • 1970-01-01
      • 2020-03-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多