ID:               28790
 Comment by:       bcurry at freeshell dot org
 Reported By:      jnoll at prim dot hu
 Status:           Assigned
 Bug Type:         Feature/Change Request
 Operating System: Debian GNU/Linux (unstable)
 PHP Version:      4.3.6
 Assigned To:      pollita
 New Comment:

I'd like to second the motion for an .INI-option enabling the stat
cache, defaulting to 'true.' In my case, I would certainly set this
option to 'false.'

In my humble opinion, the stat cache should either invalidate itself on
every file access and modification - or not cache entries, at all. I
depend on "file_exists" returning 'true' if a file exists, and 'false'
if not. Enabling the stat cache makes this (and similar) built-in
functions behave non-deterministically, and therefore un-reliably. The
"speed" gain of caching stat results is surely obviated by the fact
that, to obtain reliable stat results, one must call "clearstatcache"
before every call to the "file_exists" (and similar) built-in functions.


Previous Comments:
------------------------------------------------------------------------

[2006-12-31 09:17:43] james at bytehosting dot com

When writing a daemon process that accesses files very often it seems
litterally stupid to cache stat on these files.

With Basic Code such as the below, the statcache adds unneccessary
overhead and actully SLOWS down the code caching & purging the cache on
EACH and EVERY revolution of code.

There MUST be an option to disable it, other than rm -rf'ing the stuff
from the src/.

Regardless if you believe its "quicker" or not is moot, for each and
every case that you give where it is quicker, I can garuntee to give you
a seperate case proving where it slows the code down.

If your not willing to add a config option, how about a runtime option?
 (after all, who needs ob_implicit_flush()? its just another 'useless'
function..., same idioligy applies here). And there are PLUNTY of cases
where code such as this is required (obviously, not the exact code, its
pseudo code)

while (TRUE) {
  clearstatcache();
  if (file_exists("file.tmp")) {
       process_stuff;
  }
}

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

[2004-06-16 17:30:45] [EMAIL PROTECTED]

I'll cut ya in on a secret: The statcache is only one entry long.

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

[2004-06-16 17:28:42] phpbugs at spam dot raszi dot hu

It would be better if the file modification functions invalidate not
the whole statcache, only the entry of the modified file.

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

[2004-06-16 16:29:51] [EMAIL PROTECTED]

Ilia was perhaps a bit short winded in his response...

This was actually discussed within the context of a feature change as
well and was turned down on the basis that it would create unnecessary
slowdowns without significant gain.

You should be aware when you're making multiple stat family calls to
the same file and call clearstatcache() accordingly.  If you're
uncertain, then just call it anyway.


However, that said it may be prudent to introduce an .ini option to
disable the cache altogether now that stat calls work on arbitrary
wrappers.  Let's leave this option open for PHP 5.1 for now.

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

[2004-06-16 16:10:36] jnoll at prim dot hu

Okay, let me change this to a feature request!

After fclose(), the stat cache for that file should be cleared. Also,
unlink and maybe copy should do this.
If a function is KNOWN to change file stat data, it should clear the
cache.

The problem is that even a file_exists() call caches the data
(including the file size!), and this is easy to overlook, when you have
a bigger system.

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

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
    http://bugs.php.net/28790

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

Reply via email to