ID:               48746
 Updated by:       paj...@php.net
 Reported By:      ddkees at illinois dot edu
 Status:           Assigned
 Bug Type:         Directory function related
 Operating System: win32 only - Windows Server 2003
 PHP Version:      5.3.0
 Assigned To:      pajoye
 New Comment:

and confirmed using XP SP3 as well.

For the record, get the junction command here:
http://technet.microsoft.com/en-us/sysinternals/bb896768.aspx


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

[2009-08-10 20:23:35] paj...@php.net

Ok, seems to be 2k3 specific. The same setup works on 2k8/vista/win7.
Thanks for your feedback!

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

[2009-08-10 20:17:32] phpstuff at cresstone dot com

cgi executable does not seem to make a difference. This is a console
log of a test I just ran:

C:\mnt\test>type phptest.php
<?php
var_dump(file_exists('junction'));
var_dump(file_exists('directory'));
?>
C:\mnt\test>dir
 Volume in drive C is coreI7_System
 Volume Serial Number is 38E2-2B62

 Directory of C:\mnt\test

2009.08.10  16.11    <DIR>          .
2009.08.10  16.11    <DIR>          ..
2009.08.10  16.10    <DIR>          directory
2009.08.10  16.10    <JUNCTION>     junction
[\??\Volume{e13ba66a-14db-11de-8e96-001fd0ae05ac}\]
2009.08.10  16.11                82 phptest.php
               1 File(s)             82 bytes
               4 Dir(s)  24,899,223,552 bytes free

C:\mnt\test>php.exe phptest.php
bool(false)
bool(true)

C:\mnt\test>php-cgi.exe phptest.php
X-Powered-By: PHP/5.3.0
Content-type: text/html

bool(false)
bool(true)

C:\mnt\test>

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

[2009-08-10 15:40:17] paj...@php.net

@dr dot e dot sheppard at web dot de

Can you try using CLI/CGI please? As you can see below it works just
fine.

C:\Users\pierre\Documents\php-sdk\php53\vc9\x86>dir
..
10.08.2009  17:36    <JUNCTION>     apps
[C:\Users\pierre\Documents\php-sdk\php53\vc9\x86\deps]
28.07.2009  00:59    <DIR>          deps
...


php.exe -r "var_dump(file_exists('./apps'));"
bool(true)


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

[2009-06-30 20:30:47] dr dot e dot sheppard at web dot de

This bug can easily be reproduced with the following scenario:

- change to a directory within your webserver's document root
- create a junction named "apps" pointing to the desired target within
the directory tree
- calling a php file (residing in parallel to the "apps" folder) with
the following code:

if(file_exists('./apps') === true){ 
   echo 'yes!';
} else {
   echo 'no!';
}

The result will be "no!".

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

[2009-06-30 19:10:21] ddkees at illinois dot edu

The file structure looks like this.  Junction points are followed by an
asterisk; that asterisk is _not_ a part of the folder's name within the
filesystem.

/
/includes
/includes/classes*
/includes/classes/.SwiftMailer
/includes/classes/course_websites
/includes/classes/directory
/includes/classes/faculty_awards*
/includes/classes/FirePHP

There are more folders than what's listed above, but that's enough to
give you the idea, I hope.  If not, let me know.

As you can see from the code example above, we start the process in
/includes/classes and look for folders/files to identify class
definitions to include.  Using this code and 5.3.0 this morning, we
found that, using the above list, only the faculty_awards junction point
would be identified as a directory when using is_dir() and when using
DirectoryIterator::isDir().

Here's a script to show what fails:

function find_directories($directory) {
        $files = new DirectoryIterator($directory);
        foreach($files as $file) {
                if($file->isDot() || $file->getFilename()=="_notes") continue;
                
                echo "Analyzing: $file<br>";
                var_dump($file->isDir());
                echo "Analysis Complete.<br><br>";
        }
}

---

If we execute that function as follows:

   find_directories($_SERVER["DOCUMENT_ROOT"] . "/includes/classes");

We would expect that all of the information listed above would result
in true.  However, the actual results of that test were:

Analyzing: .SwiftMailer
bool(false) Analysis Complete

Analyzing: course_websites
bool(false) Analysis Complete

Analyzing: directories
bool(false) Analysis Complete

Analyzing: faculty_awards
bool(true) Analysis Complete

Analyzing: FirePHP
bool(false) Analysis Complete

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

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

Reply via email to