ID: 40326 Updated by: [EMAIL PROTECTED] Reported By: sborrill at precedence dot co dot uk -Status: Open +Status: Feedback Bug Type: Streams related Operating System: NetBSD 3.1_STABLE PHP Version: 5.2.0 New Comment:
Please try using this CVS snapshot: http://snaps.php.net/php5.2-latest.tar.gz For Windows: http://snaps.php.net/win32/php5.2-win32-latest.zip Previous Comments: ------------------------------------------------------------------------ [2007-02-05 13:45:38] sborrill at precedence dot co dot uk OK, permissions are nearly the same (except in our case, it's the parent of the www directory that is -r not the www itself, but that's probably unimportant). The getcwd() line shows a difference though. On NetBSD and other Unix OSes (all except for Linux?) getcwd() returns FALSE as noted in http://bugs.php.net/bug.php?id=24185 Perhaps the reason it's working for you on Linux is because your getcwd() _isn't_ returning FALSE and there's now an extra getcwd() call in the fopen codepath. N.B. as in my original report, with PHP 5.1.6, getcwd() returned FALSE, but fopen worked nonetheless. Also, the patches to PHP in the NetBSD package are the same between 5.1.6 and 5.2.0 (or if they differ it's in an unrelated section). The patches related to php.ini, configure, curl and imap/c-client only. Everything else is stock: http://cvsweb.netbsd.org/bsdweb.cgi/pkgsrc/lang/php5/patches/ ------------------------------------------------------------------------ [2007-02-05 09:40:56] [EMAIL PROTECTED] >What OS? Linux >Are you sure you've checked file ownership? #ls -ld /www d--x--x--x 15 tony users 2864 Feb 5 12:36 /www #ls -l /www/index.php -rw-r--r-- 1 tony users 110 Feb 5 12:36 /www/index.php Apache runs as user "wwwrun". >What do you get on the getcwd() lines? string(4) "/www" Please try the latest snapshot from http://snaps.php.net if you're using some patches/adopted version. ------------------------------------------------------------------------ [2007-02-03 09:32:00] sborrill at precedence dot co dot uk What OS? Are you sure you've checked file ownership? What do you get on the getcwd() lines? We are finding this is 100% reproducible on all our customers' servers when they are using php in a UserDir. I've checked the package definition and patches at: http://cvsweb.netbsd.org/bsdweb.cgi/pkgsrc/lang/php5/ Nothing relevant has been altered betweeen 5.1.6 and 5.2.0 in the NetBSD pkg. php.ini file remains the same throughout. We aren't using safe mode or open_basedir. I looked at the CVS log for fopen_wrapper.c but didn't spot anything relevant. I'm not familiar enough with PHP internals to know where to add much debugging, but I'm happy to follow any suggestions. ------------------------------------------------------------------------ [2007-02-02 18:44:36] [EMAIL PROTECTED] Cannot reproduce. Both PHP 5.2-CVS and PHP 6-CVS work just fine with Apache 1.x. ------------------------------------------------------------------------ [2007-02-02 15:22:59] sborrill at precedence dot co dot uk Description: ------------ With PHP versions prior to 5.2.0 (e.g. 5.1.6), you could fopen() a file in the current working directory (i.e. same as the script) even if a parent directory only had +x permission and not +rx for the webserver. With 5.2.0 (and today's 5.2 snapshot) you get "Warning: fopen(file) [function.fopen]: failed to open stream: No such file or directory [...]". If it's of any relevance, with all versions, getcwd() returns FALSE on NetBSD if a parent folder is not readable, but this does not affect fopen(). This is affecting any user whose home area is mode 0711 when they run php from their public_html folder (which is mode 0755). Reproduce code: --------------- Ensuring ownership is not same as web server process (e.g. in public_html in user's home area): mkdir one mkdir one/two chmod 711 one chmod 755 one/two echo "test" > one/two/testfile one/two/index.php contains: <?php echo "cwd:".getcwd()."<br>"; $fp=fopen("testfile","r"); if($fp) fpassthru($fp); ?> Stage one: chmod 711 one Stage two: chmod 755 one Expected result: ---------------- (stage one): cwd: test (stage two) cwd: /home/testuser/public_html test Actual result: -------------- (stage 1): cwd: Warning: fopen(file) [function.fopen]: failed to open stream: No such file or directory [...] (stage two) cwd: /home/testuser/public_html test ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=40326&edit=1