相关疑难解决方法(0)

以原子方式将一行添加到文件中,如果该文件不存在则创建该文件

我正在尝试创建一个函数(用于记录)

append($path, $data)
Run Code Online (Sandbox Code Playgroud)

  1. 如果不存在则创建$ file
  2. 原子地将$ data附加到它.

它必须

  • 支持高并发性,
  • 支持长串和
  • 尽可能高效.

到目前为止,最好的尝试是:

function append($file, $data)
{
    // Ensure $file exists. Just opening it with 'w' or 'a' might cause
    // 1 process to clobber another's.
    $fp = @fopen($file, 'x');
    if ($fp)
        fclose($fp);

    // Append
    $lock = strlen($data) > 4096; // assume PIPE_BUF is 4096 (Linux)

    $fp = fopen($file, 'a');
    if ($lock && !flock($fp, LOCK_EX))
        throw new Exception('Cannot lock file: '.$file);
    fwrite($fp, $data);
    if ($lock)
        flock($fp, LOCK_UN);
    fclose($fp);
}
Run Code Online (Sandbox Code Playgroud)

它工作正常,但似乎相当复杂.是否有更清洁(内置?)的方式来做到这一点?

php

35
推荐指数
2
解决办法
3万
查看次数

两个用户同时写入文件?(PHP/file_put_contents)

如果通过将数据写入到文件file_put_contentsFILE_APPEND标志设置和两个用户在同一时间提交数据,这将追加不管,还是有机会的一个条目将被覆盖?

如果我设置了LOCK_EX标志,第二次提交是否会等待第一次提交完成,或者当无法获得独占锁时数据是否丢失?

PHP通常如何处理?我正在运行5.2.9版.如果重要的话

谢谢,瑞恩

php flags

6
推荐指数
1
解决办法
2806
查看次数

标签 统计

php ×2

flags ×1