Проверьте права доступа к файлу - PullRequest
16 голосов
/ 21 августа 2008

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

Ответы [ 5 ]

20 голосов
/ 21 августа 2008

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

clearstatcache();
echo substr(sprintf('%o', fileperms('/etc/passwd')), -4);
12 голосов
/ 21 августа 2008

Вы можете использовать команды is_readable () , is_executable () и т.д ..

6 голосов
/ 18 апреля 2013

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

function checkPerms($path)
{
    clearstatcache(null, $path);
    return decoct( fileperms($path) & 0777 );
}
1 голос
/ 11 июля 2012

Использование 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__ на ваш путь или переменную

0 голосов
/ 21 августа 2008

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

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

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

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

...