[php-src] Issue #12744: `is_readable()` and `is_writable()` return false negative on Win32's network-mapped drives
| From: | DRSDavidSoft | Date: | Tue, 21 Nov 2023 13:50:29 +0000 |
| Subject: | [php-src] Issue #12744: `is_readable()` and `is_writable()` return false negative on Win32's network-mapped drives | ||
| Groups: | php.bugs | ||
| Request: | Send a blank email to php-bugs+get-245857@lists.php.net to get a copy of this message | ||
Issue: https://github.com/php/php-src/issues/12744
Author: DRSDavidSoft
### Description
Hi there, good morning PHP team!
I'm working with PHP-CLI on Windows, and part of my project checks if a file path is readable
and/or writable. This works as expected if the file in in the local disk, such as
C:\.
However, Windows has a feature named [network-mapped
drives](https://support.microsoft.com/en-us/windows/map-a-network-drive-in-windows-29ce55d1-34e3-a7e2-4801-131475f9557d)
where you can "mount" a shared folder from another host to appear as a local disk, for
example the SMB network share \\computername\foo\bar can be "mounted" to
Z:\. In this case, calls to file_get_contents() and
file_put_contents() will actually succeed, but the corresponding calls to
is_readable() and is_writable() will return false.
Consider the following code:
```php
$my_file = "Z:\\Users\\David\\File.txt";
var_dump(
is_readable($my_file),
is_writable($my_file),
file_get_contents($my_file));
```
This results in this output:
```
bool(false)
bool(false)
string(34) "I am the content of the my_file!"
```
But I expect the following output:
```
bool(true)
bool(true)
string(34) "I am the content of the my_file!"
```
I was curious about this behavior, so I read the [documentation for
is_readable()](https://www.php.net/manual/en/function.is-readable.php), and the only
piece of useful info I found is a very old user notes contribution that says:
> ..."is_readable() checks whether you can do file_get_contents() or similar calls, no more,
> no less."
> ~ [jo at durchholz dot org](https://www.php.net/manual/en/function.is-readable.php#61293)
This doesn't seem right to me, because as you can see, the file_get_contents() is
clearly succeeding while the is_readable() call is failing.
Please note that the PHP-CLI is running through command line with my own user account, not as some
service where it wouldn't have access to the network-mapped drive.
So, I'm curious why this happens. Can you please link me to the relevant part of the source
tree that implements is_readable() and is_writable()? I'm curious why
this issue exists.
Thanks!
### PHP Version
PHP 8.1.13
### Operating System
Windows 11 Enterprise 22H2