我正在尝试创建一个函数(用于记录)
append($file, $data)
那个
- 如果
$file
不存在,则创建它并且 - 自动将
$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/