對於程式語言來說,檔案和目錄的操作是其最最基礎的功能。就像我們日常中最常見的上傳、檔案上傳之類的功能,都需要檔案和目錄操作的支援。今天我們先來簡單地學習一下 php 中關於目錄操作的一些類和函式。
首先來看看兩個常量,它們分別是目錄與路徑的分隔符號。
echo directory_separator, php_eol; // /
echo path_separator, php_eol; // :
directory_separator 常量在 linux 系統中輸出的就是 / 這個斜槓,而在 win 系統中則是 \ 這樣的反斜槓。也就是說,它是根據當前的作業系統來確定使用哪種目錄分隔符號的。path_separator 是環境路徑的分隔符,在 linux 系統中輸出的是 : ,其實就像是我們定義的系統環境變數一樣,在 linux 系統中我們檢視或新增修改 path 環境變數就都都是使用 : 來分隔的。
既然有物件這個概念,那麼也就說明目錄相關的操作其實也是有物件導向和面向過程兩種形式的,我們先來看看物件導向是如何操作的。
$directory = dir('../');
while(($dir = $directory->read())!== false)
// .
// ..
// 1.php中的日期相關函式(三).md
// source
我們使用 dir() 函式來返回乙個 directory 物件,這裡需要注意的是,directory 物件是只能通過 dir() 函式來獲取的,無法通過 new 的方式來生成例項。在獲得 directory 物件之後,我們就可以通過 read() 方法來讀取目錄中的所有內容資訊了。展示的內容其實和我們在作業系統中使用 ll -a 命令獲取的結果是類似的,它會獲得 . 、 .. 這兩個目錄資訊,代表當前目錄和上級目錄。
echo $directory->read(), php_eol;
//$directory->rewind();
while(($dir = $directory->read())!== false)
// .
// ..
// 1.php中的日期相關函式(三).md
// source
read() 方法是游標操作,也就是遍歷一次後游標就會移動到最後乙個位置,這時再呼叫 read() 就不會有任何資訊了。這時我們可以通過 rewind() 方法重置游標,然後就可以重新遍歷目錄內容。
$directory->close();
// while($dir = $directory->read())
// warning: directory::read(): supplied resource is not a valid directory resource
最後就是 close() 方法,用於關閉當前的目錄物件控制代碼。
接下來我們就看看使用面向過程的方式如何獲取目錄裡面的內容,我們同樣還是檢視相同的這個目錄,輸出和上面物件導向的方式中同樣的資訊。
$dirpath = __dir__;
if(is_dir($dirpath))
echo readdir($dh), php_eol;
rewinddir($dh);
while(($dir = readdir($dh)) !== false)
closedir($dh);
}}// .
// ..
// 2.學習php中的目錄操作.php
// 1.php中的日期相關函式(三).php
//// .
// ..
// 2.學習php中的目錄操作.php
// 1.php中的日期相關函式(三).php
is_dir() 函式用於判斷給定的路徑是否是乙個目錄,這個函式相信不少同學都使用過。opendir() 是開啟乙個給定路徑的目錄控制代碼,其實就類似於 dir() 函式來獲得 directory 物件,不過需要注意的是,opendir() 函式返回的是乙個控制代碼資源物件,不是 directory 物件。然後我們就可以使用 readdir() 函式讀取控制代碼物件中的所有目錄資訊內容了。
和 directory 物件中的 read() 方法類似,readdir() 也是游標操作的,當遍歷完一次之後,我們可以通過 rewinddir() 函式來重置控制代碼游標。最後就是 closedir() 函式,同樣也是關閉乙個控制代碼資源的函式。
除了遍歷檢視目錄之外,還有其它一些函式輔助我們獲得目錄相關的資訊。
echo getcwd(), php_eol;
// /users/zhangyue/mydoc/部落格文章
chdir('dev-blog/php/202010');
echo getcwd(), php_eol;
// /users/zhangyue/mydoc/部落格文章/dev-blog/php/202010
// chdir('dev-blog/php/202013');
// warning: chdir(): no such file or directory (errno 2)
chdir('/home');
echo getcwd(), php_eol;
// /system/volumes/data/home
getcwd() 函式是獲取當前執行 php 指令碼的目錄資訊。注意,它是你在什麼位置執行的 php 這個命令指令碼的路徑,也就是 php 程式的工作目錄,不是你當前執行的檔案的路徑。使用 chdir() 可以改變這個目錄資訊。關於 getcwd() 函式的概念如果不是特別的清楚的話,請一定自己手動測試一下。
print_r(scandir($dirpath));
// array
// (
// [0] => .
// [1] => ..
// [2] => 1.php中的日期相關函式(三).php
// [3] => 2.學習php中的目錄操作.php
// )
print_r(scandir('/users'));
// array
// (
// [0] => .
// [1] => ..
// [2] => .localized
// [3] => guest
// [4] => shared
// [5] => share
// [6] => zhangyue
// )
scandir() 函式是列出指定路徑中的檔案和目錄,它的引數必須是乙個絕對路徑,能夠以陣列的形式返回所有的內容,在某些情況下非常地方便好用。
關於 php 的目錄操作相關的內容就是這些,其實還有 mkdir() 之類的函式也是操作目錄的,不過在 php 官方文件中將它歸到了檔案操作的講解中,所以我們也將在後面學習檔案操作的時候再進行深入的學習。
測試**:
學習php中的目錄操作.php
php目錄操作
使用opendir string path 函式讀取目錄,是目錄不是檔案,函式path是字元型的路徑,同時函式返回乙個資源物件 通常在讀取路徑前判斷路徑是否正確,用bool is dir string paht 函式判斷,如果有效返回true,否則是false 讀取完檔案可以用closedir di...
php 目錄操作
1 目錄操作 1 開啟目錄 opendir 2 目錄建立 mkdir 3 刪除目錄 rmdir 4 遍歷目錄 readdir 5 關閉目錄 closedir 把目錄放入變數 filename中,然後使用opendir 函式開啟目錄。filename image handler fopen filen...
PHP操作目錄
0777 最大訪問許可權 ture 如果建立目錄的上級目錄不存在,則遞迴建立 只判斷是否存在,不管是目錄還是檔案 注意 目錄必須是空的,否則無法刪除 1 表示檔案可執行 2 表示檔案可寫 4 表示檔案可讀 順序 所有者 所有這所在的組 所有人的訪問許可權 注意 只在linux系統下有效 注意,如果新...