From:             
Operating system: Windows
PHP version:      5.3.3
Package:          *Directory/Filesystem functions
Bug Type:         Bug
Bug description:Clearstatcache() has no effect

Description:
------------
The results of is_readable() and is_writable() are being cached from the
first result on a filesystem object regardless of whether or not
clearstatcache() is used or in what form (arguments supplied, etc).  This
has only been tested on the Windows build of PHP 5.3.3 via the CLI.  It's
possible that other functions are being improperly cached as well, but I
haven't had time to test for all of them as of yet.



This does *not*, however, occur in the corresponding Windows builds of PHP
5.3.2.  In that version, no caching took place on either of those functions
at all.



You can easily reproduce this issue if you're running Windows ACL-related
tests on the filesystem in PHP 5.3.3.  The sample script I put together
requires the use of SetACL (better cross-Windows version portability;
http://setacl.sourceforge.net) to alter the file permissions.  Relative to
the test script, create a directory named "testdir", then touch a file
within that directory and name it "testfile".  We will be using that file
for our test.





This bug occurs on the ZIP-build of PHP 5.3.3 (both nts and zts) run via
CLI without any extensions loaded.  It has been successfully reproduced in
Windows XP, Windows 2003, Windows 2003 R2, Windows Vista/7, Windows 2008,
and Windows 2008 R2.  Has not been tested on Linux.



Test script:
---------------
<?php



exec( "setacl.exe -on testdir -ot file -actn setprot -op
\"dacl:p_nc;sacl:p_nc\" -rec cont_obj" );  //Isolate from any perms
inherited from parent.

exec( "setacl.exe -on testdir -ot file -actn clear -clr DACL -rec cont_obj"
);  //Clear any remaining perms.

exec( "setacl.exe -on testdir -ot file -actn ace -ace
\"n:Everyone;m:grant;p:full\"" );  //Ensures that the parent dir perms
won't affect the results.



exec( "setacl.exe -on testdir/testfile -ot file -actn ace -ace
\"n:Everyone;m:deny;p:full\"" );



var_dump( is_readable( "testdir/testfile" ) );

var_dump( is_writable( "testdir/testfile" ) );



//Tried different variations of clearstatcache() by themselves and
combined.  Made no difference either way.  Using sleep() after setacl call
made no difference, either.

clearstatcache();

clearstatcache( TRUE, "testdir/testfile" );



exec( "setacl.exe -on testdir/testfile -ot file -actn clear -clr DACL" );

exec( "setacl.exe -on testdir/testfile -ot file -actn ace -ace
\"n:Everyone;m:grant;p:full\"" );



/* Copy these two var_dumps into a separate PHP file and execute it
immediately after this script....  You'll see the correct bool(true)
results then.  

 * You can also achieve that result by calling that separate script from
this one via an exec() call (but not as an include).  --Kris */

var_dump( is_readable( "testdir/testfile" ) );

var_dump( is_writable( "testdir/testfile" ) );



Expected result:
----------------
bool(false)

bool(false)

bool(true)

bool(true)



Actual result:
--------------
bool(false)

bool(false)

bool(false)

bool(false)



-- 
Edit bug report at http://bugs.php.net/bug.php?id=52587&edit=1
-- 
Try a snapshot (PHP 5.2):            
http://bugs.php.net/fix.php?id=52587&r=trysnapshot52
Try a snapshot (PHP 5.3):            
http://bugs.php.net/fix.php?id=52587&r=trysnapshot53
Try a snapshot (trunk):              
http://bugs.php.net/fix.php?id=52587&r=trysnapshottrunk
Fixed in SVN:                        
http://bugs.php.net/fix.php?id=52587&r=fixed
Fixed in SVN and need be documented: 
http://bugs.php.net/fix.php?id=52587&r=needdocs
Fixed in release:                    
http://bugs.php.net/fix.php?id=52587&r=alreadyfixed
Need backtrace:                      
http://bugs.php.net/fix.php?id=52587&r=needtrace
Need Reproduce Script:               
http://bugs.php.net/fix.php?id=52587&r=needscript
Try newer version:                   
http://bugs.php.net/fix.php?id=52587&r=oldversion
Not developer issue:                 
http://bugs.php.net/fix.php?id=52587&r=support
Expected behavior:                   
http://bugs.php.net/fix.php?id=52587&r=notwrong
Not enough info:                     
http://bugs.php.net/fix.php?id=52587&r=notenoughinfo
Submitted twice:                     
http://bugs.php.net/fix.php?id=52587&r=submittedtwice
register_globals:                    
http://bugs.php.net/fix.php?id=52587&r=globals
PHP 4 support discontinued:          http://bugs.php.net/fix.php?id=52587&r=php4
Daylight Savings:                    http://bugs.php.net/fix.php?id=52587&r=dst
IIS Stability:                       
http://bugs.php.net/fix.php?id=52587&r=isapi
Install GNU Sed:                     
http://bugs.php.net/fix.php?id=52587&r=gnused
Floating point limitations:          
http://bugs.php.net/fix.php?id=52587&r=float
No Zend Extensions:                  
http://bugs.php.net/fix.php?id=52587&r=nozend
MySQL Configuration Error:           
http://bugs.php.net/fix.php?id=52587&r=mysqlcfg

Reply via email to