From a8ab07e4926946f9617c6bb0a2d77f473ff1102d Mon Sep 17 00:00:00 2001 From: Guilherme Nascimento Date: Tue, 8 Sep 2026 09:35:20 -0300 Subject: [PATCH 1/4] Fixes Example #2 using fileperms Same as: https://github.com/php/doc-en/pull/5842 Incorrect: ```php case 0x8000: $info = 'r'; ``` --- reference/filesystem/functions/fileperms.xml | 48 +++++++------------- 1 file changed, 16 insertions(+), 32 deletions(-) diff --git a/reference/filesystem/functions/fileperms.xml b/reference/filesystem/functions/fileperms.xml index 97f49dc1aa..1a4503a9ea 100644 --- a/reference/filesystem/functions/fileperms.xml +++ b/reference/filesystem/functions/fileperms.xml @@ -93,51 +93,35 @@ echo substr(sprintf('%o', fileperms('/etc/passwd')), -4); $perms = fileperms('/etc/passwd'); switch ($perms & 0xF000) { - case 0xC000: // сокет - $info = 's'; - break; - case 0xA000: // символическая ссылка - $info = 'l'; - break; - case 0x8000: // обычный - $info = 'r'; - break; - case 0x6000: // файл блочного устройства - $info = 'b'; - break; - case 0x4000: // каталог - $info = 'd'; - break; - case 0x2000: // файл символьного устройства - $info = 'c'; - break; - case 0x1000: // FIFO канал - $info = 'p'; - break; - default: // неизвестный - $info = 'u'; + case 0xC000: $info = 's'; break; // сокет + case 0xA000: $info = 'l'; break; // символическая ссылка + case 0x8000: $info = 'r'; break; // обычный + case 0x6000: $info = 'b'; break; // файл блочного устройства + case 0x4000: $info = 'd'; break; // каталог + case 0x2000: $info = 'c'; break; // файл символьного устройства + case 0x1000: $info = 'p'; break; // FIFO канал + + // неизвестный + default: $info = 'u'; } // Владелец +$setuid = $perms & 0x0800; $info .= (($perms & 0x0100) ? 'r' : '-'); $info .= (($perms & 0x0080) ? 'w' : '-'); -$info .= (($perms & 0x0040) ? - (($perms & 0x0800) ? 's' : 'x' ) : - (($perms & 0x0800) ? 'S' : '-')); +$info .= (($perms & 0x0040) ? ($setuid ? 's' : 'x') : ($setuid ? 'S' : '-')); // Группа +$setgid = $perms & 0x0400; $info .= (($perms & 0x0020) ? 'r' : '-'); $info .= (($perms & 0x0010) ? 'w' : '-'); -$info .= (($perms & 0x0008) ? - (($perms & 0x0400) ? 's' : 'x' ) : - (($perms & 0x0400) ? 'S' : '-')); +$info .= (($perms & 0x0008) ? ($setgid ? 's' : 'x') : ($setgid ? 'S' : '-')); // Мир +$sticky = $perms & 0x0200; $info .= (($perms & 0x0004) ? 'r' : '-'); $info .= (($perms & 0x0002) ? 'w' : '-'); -$info .= (($perms & 0x0001) ? - (($perms & 0x0200) ? 't' : 'x' ) : - (($perms & 0x0200) ? 'T' : '-')); +$info .= (($perms & 0x0001) ? ($sticky ? 't' : 'x') : ($sticky ? 'T' : '-')); echo $info; ?> From a3294fd2d1b61c50f49b9fa29d4eff2aac1eab3c Mon Sep 17 00:00:00 2001 From: Guilherme Nascimento Date: Tue, 8 Sep 2026 10:53:40 -0300 Subject: [PATCH 2/4] EN-Revision --- reference/filesystem/functions/fileperms.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reference/filesystem/functions/fileperms.xml b/reference/filesystem/functions/fileperms.xml index 1a4503a9ea..d491dfead4 100644 --- a/reference/filesystem/functions/fileperms.xml +++ b/reference/filesystem/functions/fileperms.xml @@ -1,5 +1,5 @@ - + From 4b438df46e29fa7cbf44cd3f60bc07f83b69f3dd Mon Sep 17 00:00:00 2001 From: Guilherme Nascimento Date: Tue, 8 Sep 2026 11:03:11 -0300 Subject: [PATCH 3/4] Reorder file type cases in fileperms function --- reference/filesystem/functions/fileperms.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/reference/filesystem/functions/fileperms.xml b/reference/filesystem/functions/fileperms.xml index d491dfead4..8683aa1a49 100644 --- a/reference/filesystem/functions/fileperms.xml +++ b/reference/filesystem/functions/fileperms.xml @@ -93,13 +93,13 @@ echo substr(sprintf('%o', fileperms('/etc/passwd')), -4); $perms = fileperms('/etc/passwd'); switch ($perms & 0xF000) { - case 0xC000: $info = 's'; break; // сокет - case 0xA000: $info = 'l'; break; // символическая ссылка - case 0x8000: $info = 'r'; break; // обычный - case 0x6000: $info = 'b'; break; // файл блочного устройства - case 0x4000: $info = 'd'; break; // каталог - case 0x2000: $info = 'c'; break; // файл символьного устройства case 0x1000: $info = 'p'; break; // FIFO канал + case 0x2000: $info = 'c'; break; // файл символьного устройства + case 0x4000: $info = 'd'; break; // каталог + case 0x6000: $info = 'b'; break; // файл блочного устройства + case 0x8000: $info = '-'; break; // обычный + case 0xA000: $info = 'l'; break; // символическая ссылка + case 0xC000: $info = 's'; break; // сокет // неизвестный default: $info = 'u'; From af6df439f14da4f6da0f3454578324f54027e6e1 Mon Sep 17 00:00:00 2001 From: Mikhail Alferov Date: Wed, 9 Sep 2026 11:23:50 +0300 Subject: [PATCH 4/4] Update fileperms.xml --- reference/filesystem/functions/fileperms.xml | 54 ++++++++++---------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/reference/filesystem/functions/fileperms.xml b/reference/filesystem/functions/fileperms.xml index 8683aa1a49..ced8c56f03 100644 --- a/reference/filesystem/functions/fileperms.xml +++ b/reference/filesystem/functions/fileperms.xml @@ -14,7 +14,7 @@ stringfilename - Возвращает информацию о правах доступа на файл. + Функция возвращает информацию о правах доступа на файл. @@ -37,25 +37,25 @@ &reftitle.returnvalues; - Возвращает права доступа на указанный файл в числовом виде. - Младшие биты этого значения такие же, как и биты прав доступа для - использования в функции chmod, однако, на - большинстве платформ, возвращаемое значение будет также включать - информацию о типе файла, который передан в качестве параметра - filename. Примеры ниже демонстрируют - как проверить возвращаемое значение на наличие определённых - прав и типа файла на POSIX-системах, включая Linux и macOS. + Функция возвращает права доступа на файл в числовом виде. + Младшие биты значения возврата аналогичны битам прав доступа, + которые ожидает функция chmod, однако, + на большей части платформ значение также включит + информацию о типе файла, путь к которому передали в параметр + filename. Примеры показывают + способ проверки конкретных прав и типов файлов + в значении возврата на POSIX-системах, включая Linux и macOS. - Для локальных файлов, возвращаемое значение является частью - структуры st_mode, которая возвращается функцией - С-библиотеки stat. Какие в точности биты установлены может - варьироваться от платформы к платформе. Рекомендуется поискать документацию - к вашей платформе, если требуется обработка битов возвращаемого значения, - не относящихся к правам доступа. + Для локальных файлов возвращаемое значение — часть + структуры st_mode, которую возвращает C-библиотечная функция + stat. Установка конкретных битов + зависит от платформы. Об обработке в значении возврата битов, + которые не относятся к правам доступа, рассказывает документация + к конкретной платформе. - Возвращает &false; в случае возникновения ошибки. + Функция возвращает &false;, если возникла ошибка. @@ -68,13 +68,13 @@ &reftitle.examples; - Отображение прав доступа в виде восьмеричного числа + Пример вывода прав доступа в восьмеричном представлении ]]> &example.outputs; @@ -86,22 +86,23 @@ echo substr(sprintf('%o', fileperms('/etc/passwd')), -4); - Отображение полных прав доступа + Пример вывода полных прав доступа ]]> &example.outputs;