ID: 48746
Comment by: phpstuff at cresstone dot com
Reported By: ddkees at illinois dot edu
Status: Feedback
Bug Type: Directory function related
Operating System: win32 only - Windows Server 2003
PHP Version: 5.3.0
Assigned To: pajoye
New Comment:
I was able replicate shoresofnowhere's behavior using windows 7...
I created a junction to a folder on another drive; running is_file() on
a file inside that junction returned false, as did is_dir(). Curious to
see what php thought it was looking at, I tested filetype(), which threw
an error.
I then tested symlinks in the same manner, and got good behavior.
Symlinks seem to be a good workaround for this issue.
Test log follows:
C:\mnt\test>mklink /J junction_otherDrive f:\downloads
Junction created for junction_otherDrive <<===>> f:\downloads
C:\mnt\test>mklink /D symlink_otherDrive f:\downloads
symbolic link created for symlink_otherDrive <<===>> f:\downloads
C:\mnt\test>dir
Volume in drive C is coreI7_System
Volume Serial Number is 38E2-2B62
Directory of C:\mnt\test
2009.09.04 16.05 <DIR> .
2009.09.04 16.05 <DIR> ..
2009.09.04 16.05 <JUNCTION> junction_otherDrive [f:\downloads]
2009.09.04 16.05 <SYMLINKD> symlink_otherDrive [f:\downloads]
0 File(s) 0 bytes
4 Dir(s) 30,034,223,104 bytes free
C:\mnt\test>php -r var_dump(filetype('junction_otherdrive'));
PHP Warning: filetype(): Lstat failed for junction_otherdrive in
Command line code on line 1
Warning: filetype(): Lstat failed for junction_otherdrive in Command
line code on line 1
bool(false)
C:\mnt\test>php -r
var_dump(filetype('junction_otherdrive\php-5.2.0-win32-installer.msi'));
PHP Warning: filetype(): Lstat failed for
junction_otherdrive\php-5.2.0-win32-installer.msi in Comm
and line code on line 1
Warning: filetype(): Lstat failed for
junction_otherdrive\php-5.2.0-win32-installer.msi in Command l
ine code on line 1
bool(false)
C:\mnt\test>php -r var_dump(filetype('symlink_otherdrive'));
string(3) "dir"
C:\mnt\test>php -r
var_dump(filetype('symlink_otherdrive\php-5.2.0-win32-installer.msi'));
string(4) "file"
Previous Comments:
------------------------------------------------------------------------
[2009-09-04 18:32:33] [email protected]
Ignore my last two comments, it works perfectly using what you
describe. I was testing it from another VM where this junction did not
exist.
I added a include 'dir3/two.php' to one.php, two.php being a simple
echo "two.php"
The output:
C:\test>\php53\debug_ts\php.exe -n one.php
two.php
bool(true)
C:\test>junction dir3
....
C:\test\dir3: JUNCTION
Substitute Name: e:\test
C:\test>dir dir3
...
09/04/2009 07:33 PM 24 two.php
1 File(s) 24 bytes
2 Dir(s) 202,975,232 bytes free
------------------------------------------------------------------------
[2009-09-04 17:50:34] [email protected]
Please note that it is again a XP/2k3 only issue. Debugging/fixing now.
------------------------------------------------------------------------
[2009-09-04 17:36:30] [email protected]
@shoresofnowhere at gmail dot com
ok, I can reproduce it now. I will come back as soon as I have a fix.
------------------------------------------------------------------------
[2009-09-04 17:26:49] [email protected]
@shoresofnowhere at gmail dot com
I suppose you mean:
c:\Dir
|_ one.php
|_ Dir3 (junction to d:\dir)
|_ two.php
Using this constellation, here is my output on xp SP3:
C:\mnt>junction dir3
Junction v1.05 - ..
...
C:\mnt\dir3: JUNCTION
Substitute Name: c:\test
C:\mnt>\test\php53vc6ts\php.exe one.php
bool(true)
Are you sure:
- apache has been restarted after the update?
- the right version is used?
Can you try in CLI as well please?
------------------------------------------------------------------------
[2009-09-04 11:44:08] shoresofnowhere at gmail dot com
Sorry but the latest snapshot still has problems:
Dir directory
one.php file in dir directory
Dir2 junction in dir to dir3 on another drive
two.php file in dir3
in one.php:
is_file(./dir2/two.php) returns FALSE!
Working on XP SP3 under Apache 2.2.13
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
http://bugs.php.net/48746
--
Edit this bug report at http://bugs.php.net/?id=48746&edit=1