`is_readable()` and `is_writable()` return false negative on Win32's network-mapped drives
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- C
- Sterne
- 40.4k
- Forks
- 8.1k
- Ø Merge
- 2 T. 13 Std.
- Gemergte PRs (30 T.)
- 96
Beschreibung
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 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:
$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(), 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
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
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginnen Sie damit, die Implementierungen von is_readable() und is_writable() im Quellbaum zu finden, und reproduzieren Sie dann das gemeldete Verhalten unter Windows 11 mit dem bereitgestellten Beispiel für PHP 8.1.13 und einem netzwerkzugeordneten Laufwerk. Vergleichen Sie diese Prüfungen mit file_get_contents() und file_put_contents(); abgeschlossen ist die Aufgabe, wenn die Ursache identifiziert und die Abweichung dokumentiert oder behoben wurde.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- c, php
- Bereich
- operating-systems
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Muss geklärt werden
- Anfängerfreundlichkeit
- 35/100