Bug #73758 [Com]: is_dir Drive:Folder returns true - unexpected behavior
| From: | steve dot baldwin at publisure dot com | Date: | Fri, 16 Dec 2016 12:02:22 +0000 |
| Subject: | Bug #73758 [Com]: is_dir Drive:Folder returns true - unexpected behavior | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-206057@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=73758&edit=1
ID: 73758
Comment by: steve dot baldwin at publisure dot com
Reported by: steve dot baldwin at publisure dot com
Summary: is_dir Drive:Folder returns true - unexpected
behavior
Status: Not a bug
Type: Bug
Package: Directory function related
Operating System: Windows 8.1
PHP Version: 5.6.29
Block user comment: N
Private report: N
New Comment:
Sorry, I meant to say, PHP is not correct with is_dir. Even if PHP is resolving this as a
'valid path' its not because windows cannot resolve it. Allowing this logic to proceed as
'working' means that further interactions with windows may cause further issues such as
broken file paths such as I have witnessed.
Please re-open this ticket.
Previous Comments:
------------------------------------------------------------------------
[2016-12-16 11:55:47] steve dot baldwin at publisure dot com
Actually I'm not sure that's correct. In the blog you linked to, in the test script an
environment variable is set;
// A hidden environment variable will be kept for each drive where a current directory is set
// (need to set via P/Invoke as .NET blocks this)
SetEnvironmentVariableW(@"=C:", @"C:\Program Files");
I believe this is what allows 'C:Foo' to resolve to C:\Program Files\Foo. If you use
dirname("C:PHP") it returns C:. however if you use dirname("C:PHP\Test") it will
return C:PHP. Either way it does look like PHP is actually correct regarding is_dir but windows has
some odd functionality regarding how this resolves.
------------------------------------------------------------------------
[2016-12-16 11:25:46] steve dot baldwin at publisure dot com
Wow! thats suprising.
Thank you for clarifying this. I'll close this ticket.
------------------------------------------------------------------------
[2016-12-16 11:06:32] requinix@php.net
Actually "C:PHP" is a valid path.
https://blogs.msdn.microsoft.com/jeremykuhne/2016/04/21/path-normalization/
------------------------------------------------------------------------
[2016-12-16 11:01:48] steve dot baldwin at publisure dot com
Description:
------------
If you call is_dir("D:MyFolder") when both the drive (D) and the folder (MyFolder) exists
it will return true. However windows will not resolve D:MyFolder as a valid path because a
forward/or back slash is omitted after the root drive.
The correct path is D:\MyFolder or D:/MyFolder and PHP should be returning false instead of true.
Test script:
---------------
//change this below to a valid drive and folder but omit the \\
$path = "C:PHP";
assert(is_dir($path) == false);
Actual result:
--------------
Warning: assert(): Assertion failed
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=73758&edit=1