簡體   English   中英

php scandir() 是否排除 Windows 下的隱藏文件?

[英]Does php scandir() exclude hidden files under Windows?

在 Windows 系統上,備份代理創建了與原始文件名稱幾乎相同且路徑相同的臨時隱藏文件。 這可能會干擾使用 PHP scandir()的進程。

現在我想知道 PHP scandir()是否排除了 Windows 上設置了隱藏標志的文件。

有一些關於 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()或其他人都沒有處理隱藏標志。

這是實驗和結果:

在此處輸入圖片說明

部分:

  • Windows 7的
  • PHP 5.6.9 (x86)
  • Visual Studio 2012 可再發行 x86

所以scandir()不會隱藏設置了隱藏標志的文件。

下一個問題是,是否可以配置更強大的 PHP 命令,如glob()

首先,沒有處理標志的參數:

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

其次,Gabriel S. Luraschi 有這樣一段感人的評論:

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

他推薦exec('dir ... \\A ...') 但是在商業主機上(如果它們在 Windows 上運行),這是不允許的。

可以肯定的是:使用 Linux 風格並忽略以點開頭的文件,如下所示:

從 scandir 中排除隱藏文件

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM