Проверка прав доступа к файлам

Как я могу проверить file permissions, не выполняя команду конкретной операционной системы с помощью passthru() или exec()?

Ответы

Ответ 1

Используйте функция fileperms()

clearstatcache();
echo substr(sprintf('%o', fileperms('/etc/passwd')), -4);

Ответ 3

Реальные кодеры используют побитовые операции, а не строки;) Это гораздо более элегантный способ обработки разрешений:

function checkPerms($path)
{
    clearstatcache(null, $path);
    return decoct( fileperms($path) & 0777 );
}

Ответ 4

Используйте функцию fileperms() и подстроку:

substr(decoct(fileperms(__DIR__)), -4); // 0777
substr(decoct(fileperms(__DIR__)), -3); // 777

Для файла:

substr(decoct(fileperms(__FILE__)), -4); // 0644
substr(decoct(fileperms(__FILE__)), -3); // 644

Замените __FILE__ и __DIR__ на свой путь или переменную

Ответ 5

Что вы хотите делать, проверяя разрешения на доступ к файлам?

При написании защищенного кода почти всегда неверно "проверять, а затем делать" что угодно. Причина в том, что между проверкой того, можете ли вы что-то сделать и действительно ли это сделать, состояние системы может измениться так, что выполнение этого будет иметь другой результат.

Например, если вы проверяете, существует ли файл перед его записью, не проверяйте, успешно ли вы написали файл (или не проверяете достаточно подробно), а затем позже зависит от содержимого файл, который вы написали, вы действительно можете прочитать файл, написанный злоумышленником.

Итак, вместо проверки прав доступа к файлам просто сделайте все, что бы вы делали, если проверка разрешений прошла успешно, и обработайте ошибки изящно.