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