On Wed, 2008-07-16 at 06:45 -0700, Rasmus Lerdorf wrote: > Arvids Godjuks wrote: > > Hello. > > > > I think this should be optimized. > > I'm not an expert ofcourse, but as I understood there is only one case > > witch need a special treatment - require/include _one when a file with > > equal contents is included from different directories. > > You can make a switch witch controls if lstat is made or not in these > > cases. People who know what they are doing will switch it to off and > > make sure their includes don't result in Fatal error (anyway, to my > > opinion it is bad desing if such thing happens). > > Ofcourse open_basedir users will don't have any benefit from it, but > > that's their choise. > > So I think you should think it out and make this optimization to 5.3 > > release. It would be great optimization, IMHO. > > But all these lstats should be getting cached, so I don't see how it > would affect performance very much. If you are blowing your realpath > cache, you need to take a look at why that is happening. > > We probably should disconnect clearstatcache() from the realpath_cache, > and we could perhaps look at doing partial path caches through our own > realpath implementation. The other thing that can suck is when you have > an include_path miss. We don't cache misses like this, so if you are > relying on include_path to find your files and you don't hit it on the > first try, you are going to see a bunch of stats. But that is again > something that is easily fixed by not writing crappy code. > > I think that breaking code that looks like this: > > require_once './a.inc'; > require_once 'a.inc'; > require_once '../a.inc'; > require_once 'includes/a.inc'; > > when these all refer to the same a.inc file depending on where the > parent file is and what the coder had for breakfast that morning would > be a very bad idea. > > -Rasmus >
Since the realpath cache is only relevant for a single request(right?), removing these lstats calls will a major benefit. Before moving our portal dir to the / dir, ~40% of our page requests were slow on the server side (I'm not sure if my company policies allow me to expose exactly what is considered slow), after moving it ~20% of the page requests were slow! this is significant. And there are still many lstat calls made inside our portal's directory tree. So I think that a php.ini directive for switching off these lstats which will be off by default, will be a great thing. -Amir.