亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
關(guān)鍵要點(diǎn)
基本解決方案
使用 opendir()readdir()
使用 scandir()
讓我們使用 SPL 迭代器
FilesystemIterator
RecursiveDirectoryIterator
GlobIterator
結(jié)論
關(guān)於使用 PHP 列出文件和目錄的常見問題解答 (FAQ)
如何在 PHP 中對(duì)文件和目錄進(jìn)行排序?
如何在 PHP 中列出文件和目錄時(shí)排除某些文件或目錄?
如何僅在 PHP 中列出目錄而不是文件?
如何在 PHP 中遞歸列出文件和目錄?
列出文件時(shí),如何在 PHP 中獲取每個(gè)文件的大???
列出文件時(shí),如何在 PHP 中獲取每個(gè)文件的最後修改日期?
如何在 PHP 中列出文件時(shí)按擴(kuò)展名過濾文件?
如何在 PHP 中列出遠(yuǎn)程目錄中的文件和目錄?
如何在 PHP 中處理列出文件和目錄時(shí)的錯(cuò)誤?
如何在 PHP 中列出 ZIP 存檔中的文件和目錄?
首頁(yè) 後端開發(fā) php教程 PHP主|列出PHP的文件和目錄

PHP主|列出PHP的文件和目錄

Feb 25, 2025 pm 06:23 PM

PHP Master | List Files and Directories with PHP

本文探討 PHP 應(yīng)用開發(fā)中常見的任務(wù):列出文件和目錄。我們將介紹幾種基本和高級(jí)的解決方案,並分析其優(yōu)缺點(diǎn)。首先,我們將介紹三種使用基本 PHP 函數(shù)的方法,然後逐步過渡到利用 SPL 迭代器的更強(qiáng)大的方法。為方便討論,我們假設(shè)目錄結(jié)構(gòu)如下:

<code>---manager
|
---user
|   ---document.txt
|   ---data.dat
|   ---style.css
|---article.txt
|---master.dat
|---script.php
|---test.dat
|---text.txt</code>

關(guān)鍵要點(diǎn)

  • PHP 提供多個(gè)函數(shù)來列出文件和目錄,包括 glob()、opendir()readdir()、closedir()scandir()。這些函數(shù)的靈活性各不相同,有些需要後期過濾。
  • 標(biāo)準(zhǔn) PHP 庫(kù) (SPL) 提供面向?qū)ο蟮慕鉀Q方案來列出文件和目錄,包括 FilesystemIterator、RecursiveDirectoryIteratorGlobIterator。這些迭代器可以擴(kuò)展以更好地滿足特定需求。
  • glob() 函數(shù)是一種單行解決方案,允許過濾,但缺乏靈活性。相反,opendir()、readdir()closedir() 提供更大的靈活性,但需要更冗長(zhǎng)的代碼和後期過濾。
  • scandir() 函數(shù)也需要後期過濾,但不需要管理文件句柄。對(duì)於面向?qū)ο蟮姆椒?,?yīng)使用 SPL 庫(kù)。 GlobIterator 允許預(yù)過濾,而其他迭代器可以使用 RegexIterator 實(shí)現(xiàn)相同的功能。

基本解決方案

第一組方法演示了 glob() 函數(shù)的使用,opendir()readdir()closedir() 函數(shù)的組合,以及 scandir() 函數(shù)的使用。

使用 glob()

第一個(gè)要討論的函數(shù)是 glob(),它允許我們使用與最著名的 shell 類似的通配符來搜索路徑名。該函數(shù)有兩個(gè)參數(shù):

  • $pattern (必填):搜索模式
  • $flags (可選):官方文檔中列出的一個(gè)或多個(gè)標(biāo)誌

讓我們看一些例子!要在目錄中搜索所有以 *.txt 結(jié)尾的文件和目錄,您可以編寫:

<?php $filelist = glob("*.txt");

如果您顯示 $filelist,輸出將是:

<code>array (
  0 => 'article.txt',
  1 => 'text.txt'
)</code>

如果您想要以“te”開頭的文件和目錄列表,則要編寫的代碼是:

<?php $filelist = glob("te*");

輸出是:

<code>array (
  0 => 'test.dat',
  1 => 'text.txt'
)</code>

要僅獲取包含“ma”的目錄列表,代碼如下:

<?php $filelist = glob("*ma*", GLOB_ONLYDIR);

在這個(gè)最後一個(gè)例子中,輸出是:

<code>---manager
|
---user
|   ---document.txt
|   ---data.dat
|   ---style.css
|---article.txt
|---master.dat
|---script.php
|---test.dat
|---text.txt</code>

請(qǐng)注意,最後一個(gè)示例使用 GLOB_ONLYDIR 常量作為可選的第二個(gè)參數(shù)。如您所見,名為 master.dat 的文件被排除在外。儘管 glob() 函數(shù)易於使用,但在某些情況下它並不靈活。例如,它沒有標(biāo)誌來僅檢索與給定模式匹配的文件(而不是目錄)。

使用 opendir()readdir()

我想討論的第二種讀取文件和目錄的方法涉及 opendir()readdir()closedir() 函數(shù)。 opendir() 打開目錄並返回連接句柄。檢索到句柄後,您可以使用 readdir()。每次調(diào)用此函數(shù)時(shí),它都會(huì)在打開的目錄中給出下一個(gè)文件或目錄的名稱。檢索到所有名稱後,該函數(shù)返回 false。要關(guān)閉句柄,您可以使用 closedir()。與 glob() 不同,這種方法稍微複雜一些,因?yàn)槟鷽]有參數(shù)來幫助您過濾返回的文件和目錄。您必須自己執(zhí)行後期過濾才能獲得所需內(nèi)容。為了與 glob() 函數(shù)並行,以下示例檢索所有以“te”開頭的文件和目錄的列表:

<?php $filelist = glob("*.txt");

輸出與之前的示例相同。但是,如果您執(zhí)行上面的代碼並在運(yùn)行時(shí)輸出 $entry 的值,您會(huì)發(fā)現(xiàn)它有時(shí)包含一些奇怪的條目:“.”和“..” 。這些是您在文件系統(tǒng)每個(gè)目錄中都會(huì)找到的兩個(gè)虛擬目錄。它們分別代表當(dāng)前目錄和父目錄(上一級(jí)文件夾)。第二個(gè)示例顯示如何僅檢索給定路徑中包含的文件。

<code>array (
  0 => 'article.txt',
  1 => 'text.txt'
)</code>

正如您可能猜到的那樣,使用上面的代碼會(huì)產(chǎn)生以下輸出:

<?php $filelist = glob("te*");

使用 scandir()

最後,我想介紹 scandir() 函數(shù)。它只有一個(gè)必填參數(shù):要讀取的路徑。返回值是路徑中包含的文件和目錄的數(shù)組。與最後一個(gè)解決方案一樣,要檢索文件和目錄的子集,您必須自己進(jìn)行後期過濾。另一方面,正如您從下面的代碼中看到的,此解決方案更簡(jiǎn)潔,不需要管理文件句柄。此示例顯示如何檢索以字符串“te”開頭的文件和目錄:

<code>---manager
|
---user
|   ---document.txt
|   ---data.dat
|   ---style.css
|---article.txt
|---master.dat
|---script.php
|---test.dat
|---text.txt</code>

讓我們使用 SPL 迭代器

現(xiàn)在讓我們談?wù)勔恍?SPL 迭代器。但在深入討論它們的使用之前,讓我介紹它們和 SPL 庫(kù)。 SPL 提供一系列面向?qū)ο蟮臄?shù)據(jù)結(jié)構(gòu)、迭代器、文件處理程序和其他功能的類。優(yōu)點(diǎn)之一是迭代器是類,因此您可以擴(kuò)展它們以更好地滿足您的需求。另一個(gè)優(yōu)點(diǎn)是它們具有非常有用的原生方法,可以幫助您完成許多可能面臨的常見任務(wù),並且您只需在一個(gè)地方就能找到它們。例如,在readdir() 中使用FilesystemIterator,兩者都將在循環(huán)中使用,但使用readdir() 時(shí),您的條目只是一個(gè)字符串,使用FilesystemIterator 時(shí),您擁有一個(gè)可以為您提供有關(guān)該文件或目錄的大量信息的物件(大小、所有者、權(quán)限等)。當(dāng)然,PHP 可以使用 filesize()fileowner() 等函數(shù)為您提供相同的信息,但 PHP5 已將其方法轉(zhuǎn)向 OOP。因此,總而言之,我的建議是在此處遵循該語(yǔ)言的新最佳實(shí)踐。如果您需要有關(guān) SPL 迭代器的更多一般信息,請(qǐng)查看使用 SPL 迭代器。如引言中所述,我將展示 FilesystemIteratorRecursiveDirectoryIteratorGlobIterator 的使用。第一個(gè)繼承自 DirectoryIterator,而其他繼承自 FilesystemIterator。它們都具有相同的構(gòu)造函數(shù),該構(gòu)造函數(shù)只有兩個(gè)參數(shù):

  • $path (必填):要迭代的文件系統(tǒng)項(xiàng)目的路徑
  • $flags (可選):官方文檔中列出的一個(gè)或多個(gè)標(biāo)誌

這些迭代器的實(shí)際區(qū)別在於它們導(dǎo)航給定路徑的方法。

FilesystemIterator

使用 FilesystemIterator 非常簡(jiǎn)單。為了展示它的實(shí)際應(yīng)用,我將展示兩個(gè)示例。在第一個(gè)示例中,我將搜索所有以字符串“te”開頭的文件和目錄,而第二個(gè)示例將使用另一個(gè)迭代器RegexIterator 來搜索所有以“t.dat”或“t. php”結(jié)尾的文件和目錄。 RegexIterator 用於基於正則表達(dá)式過濾另一個(gè)迭代器。

<?php $filelist = glob("*.txt");

使用上面的代碼,結(jié)果與之前的示例相同。使用 RegexIterator 的第二個(gè)示例是:

<code>array (
  0 => 'article.txt',
  1 => 'text.txt'
)</code>

在這種情況下,輸出是:

<code>---manager
|
---user
|   ---document.txt
|   ---data.dat
|   ---style.css
|---article.txt
|---master.dat
|---script.php
|---test.dat
|---text.txt</code>

RecursiveDirectoryIterator

RecursiveDirectoryIterator 提供了一個(gè)接口,用於遞歸迭代文件系統(tǒng)目錄。由於其目標(biāo),它有一些有用的方法,例如 getChildren()hasChildren(),它們分別返回當(dāng)前條目的迭代器(如果它是目錄)以及當(dāng)前條目是否為目錄。為了展示 RecursiveDirectoryIteratorgetChildren() 的實(shí)際應(yīng)用,我將重寫最後一個(gè)示例以獲得相同的結(jié)果。

<?php $filelist = glob("*.txt");

GlobIterator

GlobIterator 以類似於 glob() 函數(shù)的方式迭代文件系統(tǒng)。因此,第一個(gè)參數(shù)可以包含通配符。下面的代碼顯示了使用 GlobIterator 的常用示例。

<code>array (
  0 => 'article.txt',
  1 => 'text.txt'
)</code>

結(jié)論

在本文中,我說明了實(shí)現(xiàn)相同目標(biāo)的不同方法:如何在給定路徑中檢索和過濾文件和目錄。以下是一些需要記住的關(guān)鍵點(diǎn):

  • glob() 函數(shù)是一種單行解決方案,允許過濾,但它不是很靈活。
  • 使用 opendir()、readdir()closedir() 的解決方案有點(diǎn)冗長(zhǎng),需要後期過濾,但更靈活。
  • scandir() 函數(shù)也需要後期過濾,但不需要管理句柄。
  • 如果您想使用 OOP 方法,則應(yīng)使用 SPL 庫(kù)。此外,您可以擴(kuò)展類以滿足您的需求。
  • 雖然 GlobIterator 能夠進(jìn)行預(yù)過濾,但其他迭代器可以使用 RegexIterator 以舒適的方式實(shí)現(xiàn)相同的功能。

您是否知道實(shí)現(xiàn)此目標(biāo)的其他方法?如果是,並且您想與我們分享,請(qǐng)繼續(xù)。知識(shí)共享始終受到歡迎。 圖片來自 Fotolia

關(guān)於使用 PHP 列出文件和目錄的常見問題解答 (FAQ)

如何在 PHP 中對(duì)文件和目錄進(jìn)行排序?

可以使用 sort() 函數(shù)在 PHP 中對(duì)文件和目錄進(jìn)行排序。在使用 scandir() 函數(shù)檢索文件和目錄後,您可以應(yīng)用 sort() 函數(shù)以升序排列它們。如果您想以降序排列它們,可以使用 rsort() 函數(shù)。請(qǐng)記住將文件和目錄數(shù)組作為參數(shù)傳遞給這些函數(shù)。

如何在 PHP 中列出文件和目錄時(shí)排除某些文件或目錄?

要排除某些文件或目錄,您可以將 in_array() 函數(shù)與 scandir() 函數(shù)結(jié)合使用。 in_array() 函數(shù)檢查某個(gè)值是否存在於數(shù)組中。您可以創(chuàng)建一個(gè)要排除的文件或目錄數(shù)組,然後使用 in_array() 函數(shù)檢查文件或目錄是否存在於該數(shù)組中。如果存在,您可以跳過它。

如何僅在 PHP 中列出目錄而不是文件?

要僅列出目錄而不是文件,您可以使用 is_dir() 函數(shù)。此函數(shù)檢查某個(gè)路徑是否為目錄。您可以將其與 scandir() 函數(shù)結(jié)合使用,以檢查 scandir() 返回的數(shù)組中的每個(gè)項(xiàng)目是否為目錄。如果是,您可以將其包含在您的列表中。

如何在 PHP 中遞歸列出文件和目錄?

要遞歸列出文件和目錄,您可以創(chuàng)建一個(gè)遞歸函數(shù),該函數(shù)使用 scandir() 函數(shù)獲取文件和目錄,然後為它找到的每個(gè)目錄調(diào)用自身。這將允許它遍歷整個(gè)目錄樹。

列出文件時(shí),如何在 PHP 中獲取每個(gè)文件的大小?

要獲取每個(gè)文件的大小,您可以使用 filesize() 函數(shù)。此函數(shù)以字節(jié)為單位返回文件的大小。您可以將其與 scandir() 函數(shù)結(jié)合使用,以便在列出文件時(shí)獲取每個(gè)文件的大小。

列出文件時(shí),如何在 PHP 中獲取每個(gè)文件的最後修改日期?

要獲取每個(gè)文件的最後修改日期,您可以使用 filemtime() 函數(shù)。此函數(shù)以 Unix 時(shí)間戳的形式返回文件的最後修改時(shí)間。您可以將其與 scandir() 函數(shù)結(jié)合使用,以便在列出文件時(shí)獲取每個(gè)文件的最後修改日期。

如何在 PHP 中列出文件時(shí)按擴(kuò)展名過濾文件?

要按擴(kuò)展名過濾文件,您可以使用 pathinfo() 函數(shù)。此函數(shù)返回有關(guān)文件路徑的信息,包括擴(kuò)展名。您可以將其與 scandir() 函數(shù)結(jié)合使用,以便在列出文件時(shí)按擴(kuò)展名過濾文件。

如何在 PHP 中列出遠(yuǎn)程目錄中的文件和目錄?

要列出遠(yuǎn)程目錄中的文件和目錄,您可以使用 ftp_nlist() 函數(shù)。此函數(shù)返回 FTP 服務(wù)器上指定目錄中文件和目錄的列表。在使用 ftp_nlist() 之前,您需要使用 ftp_connect()ftp_login() 函數(shù)建立 FTP 連接。

如何在 PHP 中處理列出文件和目錄時(shí)的錯(cuò)誤?

要處理列出文件和目錄時(shí)的錯(cuò)誤,您可以使用 error_reporting()set_error_handler() 函數(shù)。這些函數(shù)允許您設(shè)置錯(cuò)誤報(bào)告級(jí)別並定義一個(gè)自定義錯(cuò)誤處理程序函數(shù),該函數(shù)將在發(fā)生錯(cuò)誤時(shí)被調(diào)用。

如何在 PHP 中列出 ZIP 存檔中的文件和目錄?

要列出 ZIP 存檔中的文件和目錄,您可以使用 ZipArchive 類。此類提供用於處理 ZIP 存檔的方法,包括 getFromName() 方法,該方法允許您檢索存檔中文件的內(nèi)容。

以上是PHP主|列出PHP的文件和目錄的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁(yè)開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
PHP變量範(fàn)圍解釋了 PHP變量範(fàn)圍解釋了 Jul 17, 2025 am 04:16 AM

PHP變量作用域常見問題及解決方法包括:1.函數(shù)內(nèi)部無(wú)法訪問全局變量,需使用global關(guān)鍵字或參數(shù)傳入;2.靜態(tài)變量用static聲明,只初始化一次並在多次調(diào)用間保持值;3.超全局變量如$_GET、$_POST可在任何作用域直接使用,但需注意安全過濾;4.匿名函數(shù)需通過use關(guān)鍵字引入父作用域變量,修改外部變量則需傳遞引用。掌握這些規(guī)則有助於避免錯(cuò)誤並提升代碼穩(wěn)定性。

如何在PHP中牢固地處理文件上傳? 如何在PHP中牢固地處理文件上傳? Jul 08, 2025 am 02:37 AM

要安全處理PHP文件上傳需驗(yàn)證來源與類型、控製文件名與路徑、設(shè)置服務(wù)器限制並二次處理媒體文件。 1.驗(yàn)證上傳來源通過token防止CSRF並通過finfo_file檢測(cè)真實(shí)MIME類型使用白名單控制;2.重命名文件為隨機(jī)字符串並根據(jù)檢測(cè)類型決定擴(kuò)展名存儲(chǔ)至非Web目錄;3.PHP配置限制上傳大小及臨時(shí)目錄Nginx/Apache禁止訪問上傳目錄;4.GD庫(kù)重新保存圖片清除潛在惡意數(shù)據(jù)。

在PHP中評(píng)論代碼 在PHP中評(píng)論代碼 Jul 18, 2025 am 04:57 AM

PHP註釋代碼常用方法有三種:1.單行註釋用//或#屏蔽一行代碼,推薦使用//;2.多行註釋用/.../包裹代碼塊,不可嵌套但可跨行;3.組合技巧註釋如用/if(){}/控制邏輯塊,或配合編輯器快捷鍵提升效率,使用時(shí)需注意閉合符號(hào)和避免嵌套。

發(fā)電機(jī)如何在PHP中工作? 發(fā)電機(jī)如何在PHP中工作? Jul 11, 2025 am 03:12 AM

AgeneratorinPHPisamemory-efficientwaytoiterateoverlargedatasetsbyyieldingvaluesoneatatimeinsteadofreturningthemallatonce.1.Generatorsusetheyieldkeywordtoproducevaluesondemand,reducingmemoryusage.2.Theyareusefulforhandlingbigloops,readinglargefiles,or

撰寫PHP評(píng)論的提示 撰寫PHP評(píng)論的提示 Jul 18, 2025 am 04:51 AM

寫好PHP註釋的關(guān)鍵在於明確目的與規(guī)範(fàn),註釋應(yīng)解釋“為什麼”而非“做了什麼”,避免冗餘或過於簡(jiǎn)單。 1.使用統(tǒng)一格式,如docblock(/*/)用於類、方法說明,提升可讀性與工具兼容性;2.強(qiáng)調(diào)邏輯背後的原因,如說明為何需手動(dòng)輸出JS跳轉(zhuǎn);3.在復(fù)雜代碼前添加總覽性說明,分步驟描述流程,幫助理解整體思路;4.合理使用TODO和FIXME標(biāo)記待辦事項(xiàng)與問題,便於後續(xù)追蹤與協(xié)作。好的註釋能降低溝通成本,提升代碼維護(hù)效率。

如何通過php中的索引訪問字符串中的字符 如何通過php中的索引訪問字符串中的字符 Jul 12, 2025 am 03:15 AM

在PHP中獲取字符串特定索引字符可用方括號(hào)或花括號(hào),但推薦方括號(hào);索引從0開始,超出範(fàn)圍訪問返回空值,不可賦值;處理多字節(jié)字符需用mb_substr。例如:$str="hello";echo$str[0];輸出h;而中文等字符需用mb_substr($str,1,1)獲取正確結(jié)果;實(shí)際應(yīng)用中循環(huán)訪問前應(yīng)檢查字符串長(zhǎng)度,動(dòng)態(tài)字符串需驗(yàn)證有效性,多語(yǔ)言項(xiàng)目建議統(tǒng)一使用多字節(jié)安全函數(shù)。

快速PHP安裝教程 快速PHP安裝教程 Jul 18, 2025 am 04:52 AM

ToinstallPHPquickly,useXAMPPonWindowsorHomebrewonmacOS.1.OnWindows,downloadandinstallXAMPP,selectcomponents,startApache,andplacefilesinhtdocs.2.Alternatively,manuallyinstallPHPfromphp.netandsetupaserverlikeApache.3.OnmacOS,installHomebrew,thenrun'bre

學(xué)習(xí)PHP:初學(xué)者指南 學(xué)習(xí)PHP:初學(xué)者指南 Jul 18, 2025 am 04:54 AM

易於效率,啟動(dòng)啟動(dòng)tingupalocalserverenverenvirestoolslikexamppandacodeeditorlikevscode.1)installxamppforapache,mysql,andphp.2)uscodeeditorforsyntaxssupport.3)

See all articles