Вопрос

Как я могу проверить 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__ с вашим путем или переменной

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top