Константы, на которые вы ссылаетесь (0x0080
и т. Д.), Не имеют точного значения, которое, по вашему мнению, они имеют.См. Документацию fileperms
:
0x0080 = owner writable
0x0010 = group writable
0x0002 = world writable
Кроме того, вы не сравниваете их, вы выполняете поразрядно И .
1000000110110110 = 33206 (dec)
0000000010000000 = 0x80 (hex)
AND ------------------------
0000000010000000 = result (bin)
Поскольку результат не равен нулю, это означает, что конкретный файл доступен для записи владельцем.
Но что делает код, который вы даете?
Ну, он возвращает true
в том и только в том случае, если файл доступен для записи любым из следующего:
- пользователя, от имени которого запускается скрипт (проверено
is_writable
) - пользователь, которому принадлежит файл
- группа, которой принадлежит файл
- любой пользователь
Это, безусловно, выглядит нелогичными глючит для меня, потому что, например:
- , если, например, только владелец может записать файл, функция вернет
true
;однако, это, конечно, не означает, что файл доступен для записи для вас , если вы не владелец! - , если целью является проверка, может ли любой написать файл(что на самом деле бессмысленно), проверка
is_writable
была бы излишней и, по крайней мере, сбивающей с толку.