在PHP 中, scandir函數用於獲取指定目錄中的文件和目錄列表。它返回一個數組,其中包含指定目錄下所有文件和子目錄的名稱。 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返回一個包含目錄內容的數組,這些內容通常是文件名和子目錄的名稱。返回值包括當前目錄( . )和父目錄( .. )的名稱。
要區分scandir返回的文件和目錄,我們可以使用is_file()和is_dir()函數。它們分別用來判斷給定路徑是文件還是目錄。通過遍歷scandir的結果,我們可以輕鬆識別每個條目的類型。
以下是一個示例,展示如何使用scandir獲取目錄列表,並通過is_file()和is_dir()來判斷文件和目錄:
<span><span><span class="hljs-meta"><?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">?></span></span><span>
</span></span>我們首先調用scandir($directory)來獲取指定目錄下的所有文件和目錄。
使用foreach循環遍歷返回的文件列表。
對每個條目,先排除.和.. ,因為它們分別代表當前目錄和父目錄,通常不需要進一步處理。
然後,使用is_dir()檢查該條目是否是目錄。如果是目錄,則輸出相應的提示。
接著,使用is_file()判斷是否為文件。如果是文件,則輸出相應的提示。
如果以上兩種條件都不滿足,我們可以認為該條目是一個特殊文件(例如符號鏈接等)。
假設/path/to/your/directory中包含以下內容:
file1.txt (文件)
file2.php (文件)
subdir1 (目錄)
subdir2 (目錄)
運行上面的代碼後,輸出結果可能如下:
<span><span>file1.txt 是一個文件
file2.php 是一個文件
subdir1 是一個目錄
subdir2 是一個目錄
</span></span>通過結合scandir和is_file() 、 is_dir()函數,我們可以方便地判斷文件系統中的條目類型,進而區分文件和目錄。 scandir本身並沒有提供直接的標識信息,但與其他文件系統函數的結合使用使得這一任務變得非常簡單。