Проверьте права доступа к файлу

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

21.08.2008 08:06:06
5 ОТВЕТОВ
РЕШЕНИЕ

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

clearstatcache();
echo substr(sprintf('%o', fileperms('/etc/passwd')), -4);
20
21.08.2008 08:10:44

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

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

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

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

0
21.08.2008 08:09:41
Всегда есть веские причины для проверки разрешений, возможно, он строит демон для исправления разрешений, который не полагается на свой сценарий для чтения или записи в файлы, поскольку другой процесс собирается это сделать.
Thomas Hunter II 20.05.2011 14:44:56
Другим примером является программа rewriteMap, которая действует в качестве шлюза на основе определенных прав доступа к файлу.
puk 21.03.2012 16:45:08

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

12
21.08.2008 08:09:46
Имейте в виду, что is_writable () не проверяет членство в группе (начиная с PHP 5.5.18).
cgeisel 12.11.2014 22:30:01

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

1
11.07.2012 14:14:38

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

function checkPerms($path)
{
    clearstatcache(null, $path);
    return decoct( fileperms($path) & 0777 );
}
6
18.04.2013 13:12:17
Что это возвращает, правда / ложь?
S.. 6.05.2014 16:08:09