В системе Windows агент резервного копирования создал временные скрытые файлы с почти таким же именем, что и исходные файлы, и по тому же пути. Это, вероятно, мешало процессу, который использовал PHP scandir()
,
Теперь мне стало интересно, исключены ли PHP-файлы в Windows с установленным флагом скрытия scandir()
,
Есть несколько статей о скрытых файлах в стиле Linux, как scandir()
следует игнорировать файлы, начинающиеся с точки, но редко есть информация о файлах Windows.
Я пробовал этот код на 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.
Короткий тест показывает, что ни scandir()
ни glob()
или другие заботятся о скрытом флаге.
Вот эксперимент и результат:
Части:
Так 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 и игнорируйте файлы, начинающиеся с точки, как здесь: