buley
buley

Reputation: 29248

Is there a risk in running file_put_contents() on the same file from different PHP threads?

I know file_put_contents() makes it really easy to append data to a file in PHP. I'd like to try using PHP "threads" to file_put_contents() to the same log file from different PHP threads. Is there a risk in running file_put_contents() on the same file from different PHP threads or will these threads happily block if the file is locked or being accessed by another thread?

EDIT: Found a similar question that recommends flock(), but the risk question does not seem to be fully addressed. Are these "atomic" write operations?

Upvotes: 33

Views: 14465

Answers (2)

Jase
Jase

Reputation: 599

Simple answer, yes. clashes can occur

use something like file_put_contents($location, $data, FILE_APPEND | LOCK_EX);

When you expect multiple instances to write to the same file, you should acquire an exclusive lock so no other processes can write to the file until the current one has finished writing it's data

Upvotes: 4

Naftali
Naftali

Reputation: 146310

as it says on the man page (that you gave a link for!):

// 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);

Use the LOCK_EX flag to prevent double writes

Upvotes: 30

Related Questions