當前位置: 首頁> 最新文章列表> scandir 函數返回的結果中如何識別目錄和文件的不同標識?

scandir 函數返回的結果中如何識別目錄和文件的不同標識?

gitbox 2025-09-11

在PHP 中, scandir函數用於獲取指定目錄中的文件和目錄列表。它返回一個數組,其中包含指定目錄下所有文件和子目錄的名稱。 scandir的基本用法非常簡單,但它本身並沒有直接提供區分文件和目錄的標識。不過,我們可以通過結合其他函數來輕鬆識別每個條目的類型。

1. scandir函數的基本用法

scandir函數的語法如下:

 <span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-title function_ invoke__">scandir</span></span><span> ( </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$directory</span></span><span> [, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$sorting_order</span></span><span> = SCANDIR_SORT_ASCENDING [, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$context</span></span><span> = </span><span><span class="hljs-literal">NULL</span></span><span> ]] )
</span></span>
  • $directory :要掃描的目錄路徑。

  • $sorting_order :指定排序順序,默認為升序( SCANDIR_SORT_ASCENDING )。

  • $context :指定上下文流,可選。

scandir返回一個包含目錄內容的數組,這些內容通常是文件名和子目錄的名稱。返回值包括當前目錄( . )和父目錄( .. )的名稱。

2. 如何判斷文件與目錄?

要區分scandir返回的文件和目錄,我們可以使用is_file()is_dir()函數。它們分別用來判斷給定路徑是文件還是目錄。通過遍歷scandir的結果,我們可以輕鬆識別每個條目的類型。

3. 示例代碼

以下是一個示例,展示如何使用scandir獲取目錄列表,並通過is_file()is_dir()來判斷文件和目錄:

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$directory</span></span><span> = </span><span><span class="hljs-string">'/path/to/your/directory'</span></span><span>;  </span><span><span class="hljs-comment">// 設定要掃描的目錄</span></span><span>
</span><span><span class="hljs-variable">$files</span></span><span> = </span><span><span class="hljs-title function_ invoke__">scandir</span></span><span>(</span><span><span class="hljs-variable">$directory</span></span><span>);

</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$files</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$file</span></span><span>) {
    </span><span><span class="hljs-comment">// 跳過 "." 和 ".."</span></span><span>
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$file</span></span><span> == </span><span><span class="hljs-string">'.'</span></span><span> || </span><span><span class="hljs-variable">$file</span></span><span> == </span><span><span class="hljs-string">'..'</span></span><span>) {
        </span><span><span class="hljs-keyword">continue</span></span><span>;
    }

    </span><span><span class="hljs-variable">$filePath</span></span><span> = </span><span><span class="hljs-variable">$directory</span></span><span> . DIRECTORY_SEPARATOR . </span><span><span class="hljs-variable">$file</span></span><span>;

    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">is_dir</span></span><span>(</span><span><span class="hljs-variable">$filePath</span></span><span>)) {
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$file</span></span><span> . </span><span><span class="hljs-string">" 是一個目錄\n"</span></span><span>;
    } </span><span><span class="hljs-keyword">elseif</span></span><span> (</span><span><span class="hljs-title function_ invoke__">is_file</span></span><span>(</span><span><span class="hljs-variable">$filePath</span></span><span>)) {
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$file</span></span><span> . </span><span><span class="hljs-string">" 是一個文件\n"</span></span><span>;
    } </span><span><span class="hljs-keyword">else</span></span><span> {
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$file</span></span><span> . </span><span><span class="hljs-string">" 是未知類型\n"</span></span><span>;
    }
}
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

4. 代碼解析

  1. 我們首先調用scandir($directory)來獲取指定目錄下的所有文件和目錄。

  2. 使用foreach循環遍歷返回的文件列表。

  3. 對每個條目,先排除... ,因為它們分別代表當前目錄和父目錄,通常不需要進一步處理。

  4. 然後,使用is_dir()檢查該條目是否是目錄。如果是目錄,則輸出相應的提示。

  5. 接著,使用is_file()判斷是否為文件。如果是文件,則輸出相應的提示。

  6. 如果以上兩種條件都不滿足,我們可以認為該條目是一個特殊文件(例如符號鏈接等)。

5. 結果輸出示例

假設/path/to/your/directory中包含以下內容:

  • file1.txt (文件)

  • file2.php (文件)

  • subdir1 (目錄)

  • subdir2 (目錄)

運行上面的代碼後,輸出結果可能如下:

 <span><span>file1.txt 是一個文件
file2.php 是一個文件
subdir1 是一個目錄
subdir2 是一個目錄
</span></span>

6. 總結

通過結合scandiris_file()is_dir()函數,我們可以方便地判斷文件系統中的條目類型,進而區分文件和目錄。 scandir本身並沒有提供直接的標識信息,但與其他文件系統函數的結合使用使得這一任務變得非常簡單。