将一行添加到文件中,如果不存在,则创build它
我试图创build一个函数(用于日志logging)
append($path, $data)
那
- 创build$文件,如果它不存在和
- 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起可用)