你的代码存在一个问题,在第二次运行后,文件中的两行内容都变成了一样的。这是因为多个进程同时修改同一个文件,导致数据混乱。

为了解决这个问题,可以在写入文件之前,先将文件锁定,避免其他进程同时修改文件。可以使用 flock 函数进行文件锁定。示例代码如下:

$file = 'api.txt';
$handle = fopen($file, 'r+'); // 以读写模式打开文件句柄
if (flock($handle, LOCK_EX)) { // 锁定文件,独占模式
    $data = file($file, FILE_IGNORE_NEW_LINES); // 读取文件内容,每行作为一个数组元素
    if ($data[0] == 'https://a.com/') {
        $data[0] = 'https://b.com/';
    } else {
        $data[0] = 'https://a.com/';
    }
    ftruncate($handle, 0); // 清空文件内容
    fwrite($handle, implode(PHP_EOL, $data)); // 将修改后的内容写回到文件中
    flock($handle, LOCK_UN); // 解锁文件
}
fclose($handle); // 关闭文件句柄

代码解释:

  1. 使用 fopen 函数以读写模式打开文件,并获取文件句柄。
  2. 使用 flock 函数锁定文件,LOCK_EX 表示独占模式,其他进程无法访问该文件。
  3. 读取文件内容并进行修改。
  4. 使用 ftruncate 函数清空文件内容。
  5. 使用 fwrite 函数将修改后的内容写回文件。
  6. 使用 flock 函数解锁文件。
  7. 使用 fclose 函数关闭文件句柄。

通过使用文件锁定机制,可以有效地避免多进程同时修改文件导致的数据冲突问题,保证文件内容的一致性。


原文地址: https://www.cveoy.top/t/topic/nGfE 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录