php - 以原子方式将一行附加到文件并在文件不存在时创建它

标签 php

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

append($file, $data)

那个

  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);
}

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

最佳答案

PHP 已经有一个内置函数来执行此操作,file_put_contents() .语法是:

file_put_contents($filename, $data, FILE_APPEND);

请注意,如果文件不存在,file_put_contents() 将创建该文件(只要您有文件系统权限即可)。

关于php - 以原子方式将一行附加到文件并在文件不存在时创建它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9096470/

相关文章:

php - 如何使用 wp_enqueue_script?

php - 如何检测字符串中是否包含 UTF-8 字符?

PHP PDO : How to deal with bindValue() and reserved keywords?

php - WordPress cURL 和 wp_remote_post

php - Laravel 查询生成器检索到错误的 ID

php - 通过 1 个表的 MySQL 继承 - 权限

php - 在WordPress的用户元数组中按键删除值

php - 如何添加MySQL连接文件以检查数据库连接?

javascript - AJAX 请求触发 4 次而不是一次

php - 如何从 PDF 文件中提取图像?