Есть ли способ переключать «скрытый» или «только для чтения» переключатели на файл Windows, используя PHP? - PullRequest
3 голосов
/ 01 декабря 2010

ОБНОВЛЕНО

Как видно из заголовка, есть ли способ переключить переключатель «Скрытый» или «Только для чтения» в Windows с помощью PHP?

Я бы хотел сделать это, не открывая оболочку exec(), если это возможно.

Ответы [ 5 ]

3 голосов
/ 01 декабря 2010

Чтобы сделать файл "скрытым" в Windows, вы можете использовать

attrib +h yourfile.ext

Чтобы сделать файл "только для чтения" в Windows, вы можете использовать

attrib +r yourfile.ext

.Команды из PHP вы просто выполняете их с помощью system или exec.

Также смотрите: Атрибут

3 голосов
/ 01 декабря 2010

Файл не может быть скрыт , он всегда находится в файловой системе. Существует соглашение * NIX, что файлы, начинающиеся с ., не показываются по умолчанию для определенных операций (например, команда ls), но только если вы не выглядите достаточно усердно. То же самое относится и к Windows, но Windows обрабатывает это с мета-атрибутами файла.

То, что вы можете / должны сделать, это использовать права доступа к файлу, чтобы сделать папку / файл недоступным для тех, кто не имеет доступа к ней. Используйте chmod, chown и chgrp, чтобы сделать это из PHP. Возможно, вам придется немного узнать о правильных разрешениях файловой системы.

1 голос
/ 25 ноября 2014

Хотя в Интернете есть некоторые сообщения о том, что PHP chmod действительно сможет устанавливать флаги атрибутов Windows (по крайней мере, флаг только для чтения), я вообще не смог воспроизвести это.
Таким образом, вы должны использовать команду attrib.

READ-ONLY в Windows и * nix

Вот код для установкифайл только для чтения, который будет работать в Windows и * nix:

// set file READ-ONLY (Windows & *nix)
$file = 'path/to/file.ext';
if(isset($_SERVER['WINDIR'])) {
    // Host OS is Windows
    $file = str_replace('/', '\\', $file);
    unset($res);
    exec('attrib +R ' . escapeshellarg($file), $res);
    $res = $res[0];
}else{
    // Host OS is *nix
    $res = chmod($file, 0444);
}
//$res contains result string of operation

Подсказки:
Замена '/' на '\' важна, так как команда оболочки (attrib) не являетсястоль же терпимо к слешам, как и PHP.
$ res не установлен в части Windows, потому что exec () добавляет любое существующее значение.

HIDDEN в Windows

Если вы хотите скрыть файл, это, вероятно, будет задачей только для Windows:

// set file HIDDEN (Windows only)
$file = 'path/to/file.ext';
$file = str_replace('/', '\\', $file);
unset($res);
exec('attrib +H ' . escapeshellarg($file), $res);
$res = $res[0];
//$res contains result string of operation
1 голос
/ 01 декабря 2010

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

0 голосов
/ 01 декабря 2010

Для прав доступа к файлу, попробуйте chmod function:

<?php 
    chmod("/somedir/somefile", 0755);  // octal; correct value of mode
?>

Подробнее здесь: http://php.net/manual/en/function.chmod.php

...