Mutually exclusive flags on file_put_contents?

file, flags, locking, php

Solution

That's just bad documentation. The manual clearly states:

`FILE_APPEND` : If file filename already exists, append the data to the file instead of overwriting it. Mutually exclusive with LOCK_EX since appends are atomic and thus there is no reason to lock.

`LOCK_EX` : Acquire an exclusive lock on the file while proceeding to the writing. Mutually exclusive with FILE_APPEND.

And the example you speak of:

<?php
$file = 'people.txt';
// The new person to add to the file
$person = "John Smith\n";
// Write the contents to the file, 
// using the FILE_APPEND flag to append the content to the end of the file
// and the LOCK_EX flag to prevent anyone else writing to the file at the same time
file_put_contents($file, $person, FILE_APPEND | LOCK_EX);
?>

It looks like the person who coded the example misunderstood the meaning of 'mutually exclusive', or that produces some secret, undocumented bahaviour.

Problem

On the file_put_contents() documentation, it says the following: FILE_APPEND: Mutually exclusive with LOCK_EX since appends are atomic and thus there is no reason to lock. LOCK_EX: Mutually exclusive with FILE_APPEND. Yet, a couple of lines bellow I see the following code: ``` <?php $file = 'people.txt'; // The new person to add to the file $person = "John Smith\n"; // Write the contents to the file, // using the FILE_APPEND flag to append the content to the end of the file // and the LOCK_EX flag to prevent anyone else writing to the file at the same time file_put_contents($file, $person, FILE_APPEND | LOCK_EX); ?> ``` So, are the FILE_APPEND and LOCK_EX flags mutually exclusive or not? If yes, why do they use it in the example? Is this a case of bad documentation? Thanks for your input!

Original source