[php-src] Issue #12744: `is_readable()` and `is_writable()` return false negative on Win32's network-mapped drives

From: 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

« previous php.bugs (#245857) next »