Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:22334 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 44345 invoked by uid 1010); 10 Mar 2006 15:58:56 -0000 Delivered-To: ezmlm-scan-internals@lists.php.net Delivered-To: ezmlm-internals@lists.php.net Received: (qmail 44330 invoked from network); 10 Mar 2006 15:58:56 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 10 Mar 2006 15:58:56 -0000 X-Host-Fingerprint: 204.11.219.139 lerdorf.com Linux 2.4/2.6 Received: from ([204.11.219.139:49178] helo=colo.lerdorf.com) by pb1.pair.com (ecelerity 2.0 beta r(6323M)) with SMTP id 9D/44-27106-F32A1144 for ; Fri, 10 Mar 2006 10:58:55 -0500 Received: from [192.168.200.106] (c-24-6-5-134.hsd1.ca.comcast.net [24.6.5.134]) (authenticated bits=0) by colo.lerdorf.com (8.13.5/8.13.5/Debian-3) with ESMTP id k2AFwmAP010871; Fri, 10 Mar 2006 07:58:49 -0800 Message-ID: <4411A238.3020907@lerdorf.com> Date: Fri, 10 Mar 2006 07:58:48 -0800 User-Agent: Thunderbird 1.5 (Macintosh/20051201) MIME-Version: 1.0 To: "Brian J. France" CC: Andi Gutmans , internals@lists.php.net References: <0FF5C589-6436-45E0-8626-F0B9944046ED@firehawksystems.com> <7.0.1.0.2.20060309222503.08a04930@zend.com> <44111D29.8030407@lerdorf.com> <44112364.7070607@lerdorf.com> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [PHP-DEV] primary file realpath change From: rasmus@lerdorf.com (Rasmus Lerdorf) After poking this a bit more, it looks like this whole block of code in main.c is redundant. Here is the story: We start our journey on a dark and stormy night in June 2002 with this bug: http://bugs.php.net/17720 This led to this fix: http://cvs.php.net/viewcvs.cgi/php-src/main/main.c?r1=1.461&r2=1.462 which had this commit message: Main script should not be parsed when (include|require)_once()'ed, #17720 # Derick, MFH? Now, at the time this was the correct fix. However, fast forward to March 2005 and we have a patch from Stas to zend_execute_scripts: http://cvs.php.net/viewcvs.cgi/ZendEngine2/zend.c?view=diff&r1=1.297&r2=1.298 which adds the opened file to the included_files list. This means that we are now trying to add the main script to the included_file list twice which in itself is bad. We'll test this a bit more, but it looks safe to remove that block of code. The test case in bug 17720 works fine without that block of code in main.c and I see no other reason to have it there. -Rasmus Brian J. France wrote: > > On Mar 10, 2006, at 1:57 AM, Rasmus Lerdorf wrote: > >> Rasmus Lerdorf wrote: >>> Andi Gutmans wrote: >>>> Are you sure VCWD_REALPATH doesn't use the realpath cache? It did >>>> last time I checked and I think is still the right method to use >>>> there... >>> quite >>> #define VCWD_REALPATH(path, real_path) realpath(path, real_path) >> >> By the way, I agree that expand_filepath() is not the right fix here >> since the first thing it does is a getcwd. We have just done a chdir >> and haven't executed any script yet so we know the cwd. Feed that >> directly to virtual_file_ex() there perhaps? I haven't really dug >> into it. > > Were you seeing two getcwd calls? I can remove one, but I don't see > away around the second one. I changed to virtual_realpath which does > remove the getcwd in php_execute_script function, but it seems that is > shows up a little later when it uses the stream open which called > expand_filepath: > > #0 0x203ab410 in __getcwd () from /usr/lib/libc.so.4 > #1 0x203b2ab6 in getcwd () from /usr/lib/libc.so.4 > #2 0x2060de86 in expand_filepath (filepath=0x2cbc08 > "/bench_main.php", real_path=0x0) > at main/fopen_wrappers.c:521 > #3 0x2061c1bd in _php_stream_fopen (filename=0x2cbc08 > "/bench_main.php", mode=0x206f1fe3 "rb", > opened_path=0x9fbff7cc, options=133) > at /main/streams/plain_wrapper.c:855 > #4 0x2061c974 in _php_stream_fopen_with_path (filename=0x2cbc08 > "/bench_main.php", > mode=0x206f1fe3 "rb", path=0x12b640 ".://pear", > opened_path=0x9fbff7cc, options=133) > at /main/streams/plain_wrapper.c:1238 > #5 0x2061c338 in php_plain_files_stream_opener (wrapper=0x2077c008, > path=0x2cbc08 > "/bench_main.php", mode=0x206f1fe3 "rb", options=133, > opened_path=0x9fbff7cc, context=0x0) > at/main/streams/plain_wrapper.c:931 > #6 0x2061962e in _php_stream_open_wrapper_ex (path=0x2cbc08 > "bench_main.php", > mode=0x206f1fe3 "rb", options=141, opened_path=0x9fbff7cc, context=0x0) > at main/streams/streams.c:1771 > #7 0x2060943b in php_stream_open_for_zend (filename=0x2cbc08 > "/bench_main.php", > handle=0x9fbff7c4) at main/main.c:901 > #8 0x2064a866 in zend_stream_open (filename=0x2cbc08 > "/bench_main.php", > handle=0x9fbff7c4) at Zend/zend_stream.c:47 > #9 0x2064a8dc in zend_stream_fixup (file_handle=0x9fbff7c4) at > Zend/zend_stream.c:62 > #10 0x20623ee7 in open_file_for_scanning (file_handle=0x9fbff7c4) at > Zend/zend_language_scanner.c:2982 > #11 0x20623fce in compile_file (file_handle=0x9fbff7c4, type=2) at > Zend/zend_language_scanner.c:3068 > #12 0x2063cd1c in zend_execute_scripts (type=8, retval=0x0, > file_count=3) at Zend/zend.c:1093 > #13 0x2060a653 in php_execute_script (primary_file=0x9fbff7c4) at > main/main.c:1724 > > Brian