Bug #63908 [Com]: file_put_contents is not atomic.
| From: | awm086 at gmail dot com | Date: | Mon, 07 Jan 2013 23:48:20 +0000 |
| Subject: | Bug #63908 [Com]: file_put_contents is not atomic. | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-175839@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=63908&edit=1
ID: 63908
Comment by: awm086 at gmail dot com
Reported by: awm086 at gmail dot com
Summary: file_put_contents is not atomic.
Status: Not a bug
Type: Bug
Package: Filesystem function related
Operating System: LINUX
PHP Version: Irrelevant
Block user comment: N
Private report: N
New Comment:
I noticed that function tempname does the same thing. Is that the case?
Previous Comments:
------------------------------------------------------------------------
[2013-01-06 00:33:34] rasmus@php.net
http://lxr.php.net/xref/PHP_5_4/ext/standard/file.c#564
------------------------------------------------------------------------
[2013-01-06 00:24:42] awm086 at gmail dot com
Where can I find the C implementation of the function. I am just curious now.
------------------------------------------------------------------------
[2013-01-06 00:09:16] rasmus@php.net
Nope, sorry, there isn't. The false indicates that the function wasn't able to
complete its operation. Much like the underlying filesystem calls, there is no
such thing as transactions or anything along those lines where you can group a
bunch of operations into a single atomic unit. That's simply not how filesystem
operations work.
------------------------------------------------------------------------
[2013-01-05 23:40:34] awm086 at gmail dot com
I cannot belive that a function returns false, indicating that a file failed to be
written, and still write to the file system. There must be a way.
------------------------------------------------------------------------
[2013-01-04 23:56:46] rasmus@php.net
Sorry, there is no way to guarantee that. Even if we were to check before
starting to write, there is no way to do an atomic check+write, so in between
checking and writing even though the check said there should be space to write to
completion, the filesystem could have filled up by the time we actually do the
write. If you need this, you have to do it in userspace and apply whatever logic
makes sense for your environment to ensure that the write is safe.
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
https://bugs.php.net/bug.php?id=63908
--
Edit this bug report at https://bugs.php.net/bug.php?id=63908&edit=1