ID:               39351
 User updated by:  lampiluoto at gmail dot com
 Reported By:      lampiluoto at gmail dot com
-Status:           Feedback
+Status:           Open
 Bug Type:         *Directory/Filesystem functions
 Operating System: Solaris10
 PHP Version:      5.2.0
 New Comment:

Here's truss output with php5.2-200611151130.

There seems to be changes for stat()'ing the 
file and though it fixes the first 
include('inc/config.php') it causes problems 
later on. 

Including func_prepare.php is with absolute path 
in PHP code and then including db_interface.php 
is with relative path. Just for testing ;)

I have --prefix=/opt/httpd/dev-installation/php5 for 
configuring PHP and it even tries to stat() files 
from there. Result is failing includes. Truss 
output differs quite a lot from 5.1.6.

#
# php5.2-200611151130
#

25255:  stat("./inc/config.php", 0xFFFFFD7FFFDFDF70)    = 0
25255:  getcwd(0xFFFFFD7FFFDFD200, 1024)                Err#13 EACCES
[file_dac_read]
25255:  resolvepath("./inc/config.php", "inc/config.php", 1024) = 14
25255:  getcwd(0xFFFFFD7FFFDFC500, 1024)                Err#13 EACCES
[file_dac_read]
25255:  stat("^B", 0xFFFFFD7FFFDFDE90)                  Err#2 ENOENT
25255: 
stat("/opt/httpd/dev-installation/php5/lib/php/inc/config.php",0xFFFFFD7FFFDFDF70)
Err#2 ENOENT
25255: 
stat("/data/sites/www.mysite.example/dev-html/inc/config.php",0xFFFFFD7FFFDFDF70)
= 0
25255: 
resolvepath("/data/sites/www.mysite.example/dev-html/inc/config.php",
"/data/sites/www.mysite.example/dev-html/inc/config.php", 1024) = 54
25255:  stat("/data/sites/www.mysite.example/dev-html/inc/config.php",
0xFFFFFD7FFFDFDE90) = 0
25255: 
resolvepath("/data/sites/www.mysite.example/dev-html/inc/config.php",
"/data/sites/www.mysite.example/dev-html/inc/config.php", 1024) = 54
25255: 
open("/data/sites/www.mysite.example/dev-html/inc/config.php",O_RDONLY)
= 17
25255:  fstat(17, 0x007BCA68)                           = 0
25255:  read(17, " < ? p h p\n\n     / /  ".., 8192)    = 1572
25255:  read(17, 0x007BCD10, 8192)                      = 0
25255:  close(17)                                       = 0
25255:  time()                                          = 1163596213
25255: 
resolvepath("/data/sites/www.mysite.example/dev-html/inc/func_prepare.php",
"/data/sites/www.mysite.example/dev-html/inc/func_prepare.php", 1024) =
60
25255: 
stat("/data/sites/www.mysite.example/dev-html/inc/func_prepare.php",0xFFFFFD7FFFDFDE60)
= 0
25255: 
resolvepath("/data/sites/www.mysite.example/dev-html/inc/func_prepare.php",
"/data/sites/www.mysite.example/dev-html/inc/func_prepare.php", 1024) =
60
25255: 
open("/data/sites/www.mysite.example/dev-html/inc/func_prepare.php",O_RDONLY)
= 17
25255:  fstat(17, 0x007BCA68)                           = 0
25255:  read(17, " < ? p h p\n\n     / /\n".., 8192)    = 1171
25255:  read(17, 0x007C1000, 8192)                      = 0
25255:  close(17)                                       = 0
25255:  stat("./inc/db_interface.php", 0xFFFFFD7FFFDFD0C0) = 0
25255:  getcwd(0xFFFFFD7FFFDFC350, 1024)                Err#13 EACCES
[file_dac_read]
25255:  resolvepath("./inc/db_interface.php", "inc/db_interface.php",
1024) = 20
25255:  getcwd(0xFFFFFD7FFFDFB650, 1024)                Err#13 EACCES
[file_dac_read]
25255:  stat("^C", 0xFFFFFD7FFFDFCFE0)                  Err#2 ENOENT
25255: 
stat("/opt/httpd/dev-installation/php5/lib/php/inc/db_interface.php",
0xFFFFFD7FFFDFD0C0) Err#2 ENOENT
25255: 
stat("/data/sites/www.mysite.example/dev-html/inc/inc/db_interface.php",
0xFFFFFD7FFFDFD0C0) Err#2 ENOENT
25255:  open("/data/logs/httpd/error_log-php",
O_WRONLY|O_APPEND|O_CREAT,0666) = 17
25255:  lseek(17, 0, SEEK_END)                          = 9904
25255:  time()                                          = 1163596213
25255:  fstat(17, 0xFFFFFD7FFFDFB990)                   = 0
25255:  fstat(17, 0xFFFFFD7FFFDFB8E0)                   = 0
25255:  ioctl(17, TCGETA, 0xFFFFFD7FFFDFB950)           Err#25 ENOTTY
25255:  write(17, " [ 1 5 - N o v - 2 0 0 6".., 241)    = 241
25255:  close(17)                                       = 0
25255:  open("/data/logs/httpd/error_log-php",
O_WRONLY|O_APPEND|O_CREAT,0666) = 17


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

[2006-11-15 12:42:59] [EMAIL PROTECTED]

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



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

[2006-11-12 19:17:43] lampiluoto at gmail dot com

Here is part of the truss output, I can provide the whole output if
needed. After failing getcwd() 5.2.0 tries to open file with wrong
path.

#
# PHP-5.1.6
#

662:    stat("./inc/config.php", 0xFFFFFD7FFFDFDEE0)    = 0
662:    resolvepath("./inc/config.php", "inc/config.php", 1024) = 14
662:    getcwd(0xFFFFFD7FFFDFD160, 1024)                Err#13 EACCES
[file_dac_read]
662:    stat("./inc/config.php", 0xFFFFFD7FFFDFDE00)    = 0
662:    getcwd(0xFFFFFD7FFFDFDA10, 1024)                Err#13 EACCES
[file_dac_read]
662:    resolvepath("./inc/config.php", "inc/config.php", 1024) = 14
662:    getcwd(0xFFFFFD7FFFDFCCE0, 1024)                Err#13 EACCES
[file_dac_read]
662:    open("./inc/config.php", O_RDONLY)              = 17
662:    fstat(17, 0x00783920)                           = 0
662:    lseek(17, 0, SEEK_CUR)                          = 0
662:    read(17, " < ? p h p\n\n     / /  ".., 8192)    = 1572
662:    read(17, 0x0077F258, 8192)                      = 0
662:    read(17, 0x0077F258, 8192)                      = 0
662:    close(17)                                       = 0
662:    time()                                          = 1163357246

#
# PHP-5.2.0
# 

17703:  stat("./inc/config.php", 0xFFFFFD7FFFDFDFB0)    = 0
17703:  resolvepath("./inc/config.php", "inc/config.php", 1024) = 14
17703:  getcwd(0xFFFFFD7FFFDFD230, 1024)                Err#13 EACCES
[file_dac_read]
17703:  stat("./inc/config.php", 0xFFFFFD7FFFDFDED0)    = 0
17703:  getcwd(0xFFFFFD7FFFDFDAE0, 1024)                Err#13 EACCES
[file_dac_read]
17703:  resolvepath("./inc/config.php", "inc/config.php", 1024) = 14
17703:  getcwd(0xFFFFFD7FFFDFCDE0, 1024)                Err#13 EACCES
[file_dac_read]
17703:  open("/inc/config.php", O_RDONLY)               Err#2 ENOENT
17703:  open("/data/logs/httpd/error_log-php",
O_WRONLY|O_APPEND|O_CREAT,0666) = 17
17703:  lseek(17, 0, SEEK_END)                          = 0
17703:  time()                                          = 1163358385
17703:  fstat(17, 0xFFFFFD7FFFDFC880)                   = 0
17703:  fstat(17, 0xFFFFFD7FFFDFC7D0)                   = 0
17703:  ioctl(17, TCGETA, 0xFFFFFD7FFFDFC840)           Err#25 ENOTTY
17703:  write(17, " [ 1 2 - N o v - 2 0 0 6".., 224)    = 224
17703:  close(17)                                       = 0

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

[2006-11-11 22:57:10] [EMAIL PROTECTED]

Would it be possible for you to get us an strace or truss of a 5.1.6
relative include and the same for a 5.2.0 one?  I don't remember any
getcwd() changes, but it sounds like there must have been one
somewhere.

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

[2006-11-02 22:38:02] lampiluoto at gmail dot com

Description:
------------
I upgraded to PHP 5.2.0 on Solaris 10 (amd64). Executing PHP code
failed and produced errors as any require() or include() with relative
path fails. With absolute path it's ok.

The same code in same environment works fine on PHP 5.1.6.

Reason might be that on Solaris getcwd() does not return current
working directory unless user has read privileges from root directory
to the current dir. Has something changed in 5.2.0 ?

User running httpd does not have read privileges to every directory in
Apache HTTPd's DocumentRoot path - it has only execute (x) privilege to
part of the directories.
 

Reproduce code:
---------------
// this fails on 5.2.0 but works fine on 5.1.6
require('config.php');

// this works also on 5.2.0 
require('/absolute/path/to/config.php');

Expected result:
----------------
File config.inc should be read successfully. This require('config.php')
works fine on PHP 5.1.6 but after upgrading to 5.2.0 on same
environment, it does not.

Actual result:
--------------
// with relative path
[Fri Nov 03 00:13:15 2006] [error] [client x.x.x.x] PHP Warning: 
require(config.php) [<a href='function.require'>function.require</a>]:
failed to open stream: No such file or directory in /path/to/index.php
on line 3, referer: http://mysite/index.php

[Fri Nov 03 00:13:15 2006] [error] [client x.x.x.x] PHP Fatal error: 
require() [<a href='function.require'>function.require</a>]: Failed
opening required 'config.php'
(include_path='.:/opt/httpd/php5/lib/php') in /path/to/index.php on
line 3, referer: http://mysite/index.php



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


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

Reply via email to