Edit report at https://bugs.php.net/bug.php?id=61201&edit=1

 ID:                 61201
 Updated by:         [email protected]
 Reported by:        s dot kleff at goalio dot de
 Summary:            LOCK_EX in file_put_contents with custom
                     streamwrapper fails
 Status:             Open
 Type:               Bug
 Package:            Filesystem function related
 Operating System:   Win7/64
 PHP Version:        5.3.10
 Block user comment: N
 Private report:     N

 New Comment:

LOCK_EX is currently only supported for regular files (except if FILE_APPEND is 
used). This is due to the new opening mode 'c' added after bug #43182 that 
presumably the stream wrappers written at that time wouldn't support. Your 
script generates the following warning:

Warning: file_put_contents(): Exclusive locks may only be set for regular files

Although this works as designed, I think this should be revisited. I'll 
reclassify this as request.


Previous Comments:
------------------------------------------------------------------------
[2012-02-28 13:51:17] s dot kleff at goalio dot de

Description:
------------
Currently I'm using a custom Streamwrapper for memcached access. The wrapper 
works 
fine unless I'm using the LOCK_EX parameter for file_put_contents. 

If the parameter is given the function does neither write the file nor calls a 
method of the streamwrapper. I included simple echo statements in all methods 
of 
the streamwapper but no output is shown. 

I have done this because there is no documentation about which streamwrapper 
methods are called during file_put_contents. I ASSUME that it should call 
stream_lock like flock() does - but as mentioned before there is no output at 
all.

Test script:
---------------
class MyWrapper { 
   // Assume other methods are implemented

   // Just for demonstration 
   public function stream_lock($operation) {
        echo "I've been called";
    }
}

stream_register_wrapper('myWrapper, 'MyWrapper');
$result = file_put_contents('myWrapper://myFile','content',LOCK_EX);
echo $result; 

Expected result:
----------------
true
(file is written)

Actual result:
--------------
false
(file is not written)


------------------------------------------------------------------------



-- 
Edit this bug report at https://bugs.php.net/bug.php?id=61201&edit=1

Reply via email to