I prefer using the caching to solve this problem, because according to my tests, with a fairly small amount of memory, the caching pretty much solves the problem completely. So I'm thinking that if we go with the approach of this patch, we can solve the problem with a very small amount of simple code, and get a great performance boost (without requiring any INI switches or equivalent).
By the way, Sara, Wez, did you see Rasmus's email about the double stat? Do you know where it's coming from?


Andi

At 11:19 AM 7/25/2004 -0700, Rasmus Lerdorf wrote:
On Sun, 25 Jul 2004, Andi Gutmans wrote:
> I think it's going to be quite hard and not really worthwhile to add
> support for partial realpath(). In this case I like the kiss approach. It
> gives a great bang for the buck and is very simple.

Well, there is another approach here.  There are only 2 places where we
need the full paths.  The first is for the included_files list to be able
to do the require_once/include_once check and the second is for the
open_basedir mechanism.  There are a lot of people out there who do not
use open_basedir and I would guess most people looking for maximum
performance wouldn't be in a situation where they needed the open_basedir
feature.  So the only real feature in question here is the *_once
checking and even there you don't necessarily need the full path although
without it you could potentially run into problems if you include the same
file through 2 different relative paths or more obscurely if you
deliberately change your cwd halfway through your script and include a
file of the same name through the same relative path but this is not
actually the same file.  In both cases you are basically going out of your
way to trick the _once check.  At Yahoo I have been running everything
with relative paths for well over a year now without any problems.

So, some approaches:

 a. compile-time switch to disable full paths completely

b. ini switch to disable full paths completely unless open_basedir is enabled

 c. ini switch to disable full paths from include/require but enable them
    for include_once/require_once.  That is, if you want *_once protection
    you use include_once/require_once.  If you don't, you just use
    include/require and include/require would not populate the
    included_files list.

-Rasmus

-- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php



Reply via email to