将一行添加到文件中,如果不存在,则创build它

我试图创build一个函数(用于日志logging)

append($path, $data) 

  1. 创build$文件,如果它不存在和
  2. primefaces追加$数据。

它必须

  • 支持高并发性,
  • 支持长串和
  • 尽可能保持高性能。

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

 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()将创build该文件,如果它尚不存在(只要您有文件系统权限来这样做)。

使用PHP的内部函数http://php.net/manual/en/function.file-put-contents.php

 file_put_contents($file, $data, FILE_APPEND | LOCK_EX); 

FILE_APPEND =>标志将内容追加到文件末尾

LOCK_EX =>标志,以防止其他人同时写入文件(自PHP 5.1起可用)