Как я могу проверить 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__
и __FILE__
на свой путь или переменную
Что вы хотите делать, проверяя права доступа к файлам?
При написании защищенного кода почти всегда неправильно «проверять, а затем делать» что угодно. Причина в том, что между проверкой того, можете ли вы что-то сделать и действительно ли это сделать, состояние системы может измениться так, что выполнение этого будет иметь другой результат.
Например, если вы проверяете, существует ли файл до его написания, не проверяйте, успешно ли вы написали файл (или не проверяете достаточно подробно), а затем позже зависит от содержимого файла, который вы написали , вы действительно можете прочитать файл, написанный злоумышленником.
Поэтому вместо проверки прав доступа к файлам, просто сделайте все, что бы вы делали, если проверка разрешений прошла успешно и грамотно обрабатывать ошибки.