若文件位于子目录中,PHP将无法多次写入同一文件

  • 本文关键字:文件 子目录 PHP php
  • 更新时间 :
  • 英文 :


我有三个函数,基本上都在做同样的事情(我知道我可以很容易地将它们转换为一个函数,但目前它们必须保持三个(。

功能与此类似:

function setFlag($user_id, $flag)
{
$file = $user_id . '_general_info.json';
$recoveredData = file_get_contents($file);
$recoveredArray = json_decode($recoveredData, true);
$recoveredArray['isActive'] = $flag;
$serializedData = json_encode($recoveredArray);
file_put_contents($file, $serializedData, LOCK_EX);
}

因此,他们打开SAME文件,获取/解码其内容(JSON(,添加/更新其中一个JSON密钥,再次保存文件。

函数之间的唯一区别是它们添加或更新的JSON键。

有时我不得不一个接一个地调用函数:任何事情都可以正常工作。

但是,如果在函数的第一行中,我将文件路径更改为子目录,则如下所示:

__DIR__ ."/". $user_id ."/". $user_id."_general_info.json"

由于某种原因,只有最新的密钥被添加或更新到文件中。例如,如果我调用:

A();
B();
C();

就好像我只叫CCD_ 1。如果我注释掉C(),文件不会写入A保存的密钥,而是写入B保存的密钥。

我想(即使目前我不确定(这与代码多次打开同一个文件有关。

但是,为什么在当前目录中任何东西都能正常工作,而在子目录中却失败了呢?

感谢您的帮助。

在您的示例中;

  1. A((函数打开并锁定文件
  2. B((函数打开并锁定文件
  3. C((函数打开并锁定文件

通过C((函数锁定文件,仅通过C(((函数解锁。当C((函数更新文件时,A((和B((函数抛出警告。如果您的环境状态为生产,则无法看到警告。您可以在这里查看以更改开发过程中的环境。

请查看您的error_log文件,并在代码中添加一些条件,例如文件是否锁定。

最新更新