I'm trying to create a function (for purposes of logging)
append($file, $data)
that
$file
if it doesn't exist and$data
to it.It has to
So far the best attempt is:
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);
}
It works OK, but it seems to be a quite complex. Is there a cleaner (built-in?) way to do it?
PHP already has a built-in function to do this, file_put_contents(). The syntax is:
file_put_contents($filename, $data, FILE_APPEND);
Note that file_put_contents()
will create the file if it does not already exist (as long as you have file system permissions to do so).
using PHP's internal function http://php.net/manual/en/function.file-put-contents.php
file_put_contents($file, $data, FILE_APPEND | LOCK_EX);
FILE_APPEND => flag to append the content to the end of the file
LOCK_EX => flag to prevent anyone else writing to the file at the same time (Available since PHP 5.1)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With