|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2019-07-15 22:53 UTC] v-altruo at microsoft dot com
Description:
------------
Test fails across all builds regardless of opcache on/off. Looked a bit into it, the "is_file($file)" is the part that fails.
Failed Test Location: ext\standard\tests\file\bug75679.phpt
Test script:
---------------
<?php
$d = __DIR__;
$Files2Report =
[
str_pad ($d . '/' . str_repeat (str_pad ('bug75679_path_259_characters_long_', 100, '_') . '/', 1), 259, '_') => [],
str_pad ($d . '/' . str_repeat (str_pad ('bug75679_path_260_characters_long_', 100, '_') . '/', 1), 260, '_') => [],
str_pad ($d . '/' . str_repeat (str_pad ('bug75679_path_261_characters_long_', 100, '_') . '/', 1), 261, '_') => [],
];
foreach ($Files2Report as $file => &$Report)
{
$Report = ['strlen' => strlen ($file), 'result' => 'nok'];
if (! is_dir (dirname ($file))) mkdir (dirname ($file), 0777, true);
if (copy (__FILE__, $file) && is_file ($file))
{
$Report['result'] = 'ok';
}
print_r ($Report);
}
?>
Expected result:
----------------
Array
(
[strlen] => 259
[result] => ok
)
Array
(
[strlen] => 260
[result] => ok
)
Array
(
[strlen] => 261
[result] => ok
)
==DONE==
Actual result:
--------------
Array
(
[strlen] => 259
[result] => ok
)
Array
(
[strlen] => 260
[result] => nok
)
Array
(
[strlen] => 261
[result] => nok
)
==DONE==
PatchesPull Requests
Pull requests:
HistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sun Oct 26 18:00:01 2025 UTC |
Thanks for reporting! This is a rather interesting issue. At first I have not been able to reproduce the test failure. Then I checked the registry key LongPathsEnabled[1] and found that it was disabled. After enabling it, the test failed for me as well. It seems that the file and directory management functions (such as CreateFileW()) don't accept long paths prefixed by \\?\. The following patch makes the test pass for LongPathsEnabled set to true: win32/ioutil.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/win32/ioutil.h b/win32/ioutil.h index 34104a3f45..7937718766 100644 --- a/win32/ioutil.h +++ b/win32/ioutil.h @@ -190,7 +190,7 @@ __forceinline static wchar_t *php_win32_ioutil_conv_any_to_w(const char* in, siz } /* Only prefix with long if it's needed. */ - if (mb_len >= _MAX_PATH) { + if (0) { size_t new_mb_len; ret = (wchar_t *) malloc((mb_len + PHP_WIN32_IOUTIL_LONG_PATH_PREFIX_LENW + 1) * sizeof(wchar_t)); [1] <https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file#enable-long-paths-in-windows-10-version-1607-and-later>