Php scandir () исключает скрытые файлы под Windows?

В системе Windows агент резервного копирования создал временные скрытые файлы с почти таким же именем, что и исходные файлы, и по тому же пути. Это, вероятно, мешало процессу, который использовал PHP scandir(),

Теперь мне стало интересно, исключены ли PHP-файлы в Windows с установленным флагом скрытия scandir(),

Есть несколько статей о скрытых файлах в стиле Linux, как scandir() следует игнорировать файлы, начинающиеся с точки, но редко есть информация о файлах Windows.

2

Решение

Я пробовал этот код на Windows 7 и Windows 8 & 8.1 и это, безусловно, исключает скрытые файлы, помечая их.

   <?php

$location="path/to/a/folder/";

if( function_exists("scandir") ){

$file = scandir($location);

foreach($file as $this_file) {
/***Putting the condition here restricts hidden files and files starting with '.' and '~'...****/
if (is_hidden_file($location.$this_file) || $this_file == '.' || $this_file == '..' || $this_file[0]=='.' || $this_file[0]=='~' )
continue;

else {
var_dump($this_file);
}

}
}

function is_hidden_file($fn) {
$dir = "\"".$fn."\"";
$attr = trim(shell_exec("FOR %A IN (".$dir.") DO @ECHO %~aA"));
if($attr[3] === 'h')
return true;

return false;
}
?>

Я вижу, что вы упомянули в вопросе, что есть способы исключить файлы, начинающиеся с ‘.’ и прочее в Linux, но очень мало информации о Windows. Тогда проверьте это, это не только уничтожает файлы, начинающиеся с ‘.’ & ‘..’, но также выделяет скрытые файлы и наверняка будет работать в Windows.

4

Другие решения

Короткий тест показывает, что ни scandir() ни glob() или другие заботятся о скрытом флаге.

Вот эксперимент и результат:

введите описание изображения здесь

Части:

  • Windows 7
  • PHP 5.6.9 (x86)
  • Visual Studio 2012 распространяемый x86

Так scandir() не скрывает файлы с установленным флагом скрытия.

Следующий вопрос, могут ли более мощные команды PHP, такие как glob() быть настроенным.

Во-первых, нет параметра для работы с флагами:

http://php.net/manual/de/function.glob.php

Во-вторых, вот что говорит Габриэль С. Лураски:

http://php.net/manual/de/function.glob.php#110510

Он рекомендует exec('dir ... \A ...'), Но на коммерческих хостингах (если они работают на Windows) это будет запрещено.

Чтобы быть уверенным: используйте стиль Linux и игнорируйте файлы, начинающиеся с точки, как здесь:

Исключить скрытые файлы из scandir

1

По вопросам рекламы [email protected]