<menu id="ycqsw"></menu><nav id="ycqsw"><code id="ycqsw"></code></nav>
<dd id="ycqsw"><menu id="ycqsw"></menu></dd>
  • <nav id="ycqsw"></nav>
    <menu id="ycqsw"><strong id="ycqsw"></strong></menu>
    <xmp id="ycqsw"><nav id="ycqsw"></nav>
  • php時間代碼(php變量和字符串拼接)


    對于編程語言來說,文件和目錄的操作是其最最基礎的功能。就像我們日常中最常見的圖片上傳、文件上傳之類的功能,都需要文件和目錄操作的支持。今天我們先來簡單地學習一下 PHP 中關于目錄操作的一些類和函數。

    目錄與路徑分隔符

    首先來看看兩個常量,它們分別是目錄與路徑的分隔符號。

    echo DIRECTORY_SEPARATOR, PHP_EOL; // /
    echo PATH_SEPARATOR, PHP_EOL; // :
    

    DIRECTORY_SEPARATOR 常量在 Linux 系統中輸出的就是 / 這個斜杠,而在 Win 系統中則是 \ 這樣的反斜杠。也就是說,它是根據當前的操作系統來確定使用哪種目錄分隔符號的。PATH_SEPARATOR 是環境路徑的分隔符,在 Linux 系統中輸出的是 : ,其實就像是我們定義的系統環境變量一樣,在 Linux 系統中我們查看或添加修改 PATH 環境變量就都都是使用 : 來分隔的。

    Directory 對象操作

    既然有對象這個概念,那么也就說明目錄相關的操作其實也是有面向對象和面向過程兩種形式的,我們先來看看面向對象是如何操作的。

    $directory = dir('../');
    
    while(($dir = $directory->read())!== false){
        echo $dir, PHP_EOL;
    }
    // .
    // ..
    // 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){
        echo $dir, PHP_EOL;
    }
    // .
    // ..
    // 1.PHP中的日期相關函數(三).md
    // source
    

    read() 方法是游標操作,也就是遍歷一次后游標就會移動到最后一個位置,這時再調用 read() 就不會有任何信息了。這時我們可以通過 rewind() 方法重置游標,然后就可以重新遍歷目錄內容。

    $directory->close();
    // while($dir = $directory->read()){
    //     echo $dir, PHP_EOL;
    // }
    // Warning: Directory::read(): supplied resource is not a valid Directory resource 
    

    最后就是 close() 方法,用于關閉當前的目錄對象句柄。

    面向過程 Directory 操作

    接下來我們就看看使用面向過程的方式如何獲取目錄里面的內容,我們同樣還是查看相同的這個目錄,輸出和上面面向對象的方式中同樣的信息。

    $dirPath = __DIR__;
    if(is_dir($dirPath)){
        if ($dh = opendir($dirPath)) {
            while(($dir = readdir($dh)) !== false){ 
                echo $dir, PHP_EOL;
            }
            echo readdir($dh), PHP_EOL;
            
    
            rewinddir($dh);
            while(($dir = readdir($dh)) !== false){ 
                echo $dir, PHP_EOL;
            }
    
            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 官方文檔中將它歸到了文件操作的講解中,所以我們也將在后面學習文件操作的時候再進行深入的學習。

    版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。

    發表評論

    登錄后才能評論
    国产精品区一区二区免费