Ответ 1
Используйте функция fileperms()
clearstatcache();
echo substr(sprintf('%o', fileperms('/etc/passwd')), -4);
Как я могу проверить file permissions
, не выполняя команду конкретной операционной системы с помощью passthru()
или exec()
?
Используйте функция fileperms()
clearstatcache();
echo substr(sprintf('%o', fileperms('/etc/passwd')), -4);
Вы можете использовать is_readable(), is_executable() и т.д.
Реальные кодеры используют побитовые операции, а не строки;) Это гораздо более элегантный способ обработки разрешений:
function checkPerms($path)
{
clearstatcache(null, $path);
return decoct( fileperms($path) & 0777 );
}
Используйте функцию 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__
на свой путь или переменную
Что вы хотите делать, проверяя разрешения на доступ к файлам?
При написании защищенного кода почти всегда неверно "проверять, а затем делать" что угодно. Причина в том, что между проверкой того, можете ли вы что-то сделать и действительно ли это сделать, состояние системы может измениться так, что выполнение этого будет иметь другой результат.
Например, если вы проверяете, существует ли файл перед его записью, не проверяйте, успешно ли вы написали файл (или не проверяете достаточно подробно), а затем позже зависит от содержимого файл, который вы написали, вы действительно можете прочитать файл, написанный злоумышленником.
Итак, вместо проверки прав доступа к файлам просто сделайте все, что бы вы делали, если проверка разрешений прошла успешно, и обработайте ошибки изящно.