一、概述
scandir() 函數用於返回指定目錄中的文件和目錄的數組。該函數返回一個數組,其中包括目標目錄中所有的文件和子目錄的名稱。該函數可接受倆個參數,第一個參數必選且為需要獲取文件和目錄的目標目錄,第二個參數為可選參數,表示列出的文件類型的規則,支持通配符匹配,也支持數組形式的匹配。如果執行失敗將返回 FALSE。
scandir()函數不會列出隱藏文件和文件夾。
二、函數語法
scandir(directory,sorting_order)
參數:
– directory 必須。規定要搜索的目錄。
– sorting_order 可選。規定排序順序。可能的值:0 或 SORT_ASC – 默認。按英文字母升序排序;1 或 SORT_DESC – 按英文字母降序排序。
三、函數返回值
scandir() 函數返回指定目錄中的文件和目錄的數組。
四、使用示例
以下示例演示了如何使用 scandir() 函數。
$dir = "/test/"; $files1 = scandir($dir);//以默認方式掃描目錄 $files2 = scandir($dir, 1);//按名稱反向掃描目錄 print_r($files1); print_r($files2);
運行結果:
Array ( [0] => . [1] => .. [2] => file1.txt [3] => file2.txt [4] => dir1 ) Array ( [0] => dir1 [1] => file2.txt [2] => file1.txt [3] => .. [4] => . )
上述代碼先定義了一個目錄,然後使用 scandir() 函數掃描該目錄並返回目錄下的子目錄和文件名。同時,示例還展示了如何以不同的排序順序返回查找結果。
五、案例分析
1、列出目錄中指定類型的文件
scandir() 函數可以通過指定排序順序和文件類型規則來獲取指定類型的文件。例如:
$dir = "/test/"; $allowed = array('gif', 'jpeg', 'jpg', 'png'); $files = array_diff(scandir($dir), array('.', '..')); $result = []; foreach($files as $file) { $ext = pathinfo($file, PATHINFO_EXTENSION); if(in_array($ext, $allowed)) { $result[] = $file; } } print_r($result);
在上述示例中,$allowed 數組指定了允許獲取的文件類型。scandir() 函數首先獲取指定目錄的所有文件和目錄,接着使用 array_diff() 函數將點(.)和雙點(..)排除。接下來,遍歷每個文件,提取每個文件的擴展名,如果允許的文件類型數組包含該擴展名,則將文件添加到結果數組中。
2、列出目錄中所有文件的元數據
scandir() 函數可以實現獲取目錄下所有文件的元數據。這個案例展示了如何使用 scandir() 和其他幾個信息查找函數實現。
$dir = "/test/"; $dirHandle = opendir($dir); $results = []; while (($file = readdir($dirHandle)) !== false) { if ($file !== '.' && $file !== '..') { //創建一個零時數組 $info = array(); $info['name'] = $file; // 檢查文件是否是目錄 if (is_dir($dir . '/' . $file)) { $info['type'] = "Directory"; } else { $info['type'] = "File"; } $info['size'] = filesize($dir . '/' . $file); $info['last_accessed'] = fileatime($dir . '/' . $file); $info['last_modified'] = filemtime($dir . '/' . $file); //將數組添加到$results $results[] = $info; } } // 關閉目錄句柄 closedir($dirHandle); // 顯示所有文件的元信息(位元組數,上一次訪問時間,上次文件修改時間) foreach ($results as $result) { echo $result['name'] . ': ' . $result['type'] . ', Size: ' . $result['size'] . ', Last Accessed: ' . date("j F Y H:i:s", $result['last_accessed']) . ', Last Modified: ' . date("j F Y H:i:s", $result['last_modified']) . '
'; }
在上述示例中,首先使用 opendir() 函數獲取目錄的處理句柄。然後遍歷該目錄中的每個文件並提取元數據,包括文件名、類型(文件或目錄)、大小、上一次訪問時間和上一次修改時間。最後,將文件元數據存儲在名為 $results 的數組中,並根據日期和時間格式使用 date() 函數顯示結果。
六、總結
scandir() 函數是 PHP 中一個強大的文件系統函數,可用於獲取指定目錄的所有文件和目錄。此函數非常適合獲取目錄內容,並此函數可以方便地過濾結果以獲取所需的內容。了解 PHP 文件系統函數的開發人員將能夠更好地管理他們的 web 應用程序並快速定位問題。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/248183.html