PHP Conference Japan 2024

eio_readdir

(PECL eio >= 0.0.1dev)

eio_readdir讀取整個目錄

說明

eio_readdir(
    字串 $path,
    整數 $flags,
    整數 $pri,
    可呼叫 $callback,
    字串 $data = NULL
): 資源

透過系統呼叫 `opendir`、`readdir` 和 `closedir` 讀取整個目錄,並根據 `flags` 參數,在 `callback` 函式的 `result` 參數中返回名稱或陣列。

參數

path

目錄路徑。

flags

EIO_READDIR_* 常數的組合。

pri

請求優先級:**`EIO_PRI_DEFAULT`**、**`EIO_PRI_MIN`**、**`EIO_PRI_MAX`** 或 **`null`**。如果傳入 **`null`**,`pri` 會在內部設定為 **`EIO_PRI_DEFAULT`**。

callback

請求完成時會呼叫 `callback` 函式。它應該符合以下原型:

void callback(mixed $data, int $result[, resource $req]);
data

傳遞給請求的自訂資料。

result

請求特定的結果值;基本上是對應系統呼叫返回的值。

req

這是可選的請求資源,可以與 `eio_get_last_error()` 等函式一起使用。

data

傳遞給 `callback` 的任意變數。

返回值

`eio_readdir()` 成功時返回請求資源,失敗時返回 **`false`**。根據 `flags` 設定 `callback` 函式的 `result` 參數。

`EIO_READDIR_DENTS` (int)
`eio_readdir()` 旗標。如果指定,回呼函式的 result 參數會變成一個陣列,包含以下鍵值:`'names'` - 目錄名稱陣列;`'dents'` - 類似 `struct eio_dirent` 的陣列,每個陣列都包含以下鍵值:`'name'` - 目錄名稱;`'type'` - 其中一個 *EIO_DT_* 常數;`'inode'` - inode 編號(如果可用,否則未指定)。
`EIO_READDIR_DIRS_FIRST` (int)
指定此旗標時,名稱將以可能的目錄優先的順序返回,以最佳的 stat 順序排列。
`EIO_READDIR_STAT_ORDER` (int)
指定此旗標時,名稱將以適合對每個名稱執行 `stat` 的順序返回。如果計劃對指定目錄中的所有檔案執行 `stat()`,返回的順序可能會是最快的。
`EIO_READDIR_FOUND_UNKNOWN` (int)

節點類型

`EIO_DT_UNKNOWN` (int)
未知的節點類型(非常常見)。需要進一步的 `stat()` 呼叫。
`EIO_DT_FIFO` (int)
FIFO 節點類型
EIO_DT_CHR (整數)
節點類型
EIO_DT_MPC (整數)
多工字元裝置 (v7+coherent) 節點類型
EIO_DT_DIR (整數)
目錄節點類型
EIO_DT_NAM (整數)
Xenix 特殊命名檔案節點類型
EIO_DT_BLK (整數)
節點類型
EIO_DT_MPB (整數)
多工區塊裝置 (v7+coherent)
EIO_DT_REG (整數)
節點類型
EIO_DT_NWK (整數)
EIO_DT_CMP (整數)
HP-UX 網路特殊節點類型
EIO_DT_LNK (整數)
連結節點類型
EIO_DT_SOCK (整數)
Socket 節點類型
EIO_DT_DOOR (整數)
Solaris door 節點類型
EIO_DT_WHT (整數)
節點類型
EIO_DT_MAX (整數)
最高的節點類型值

範例

範例 #1 eio_readdir() 範例

<?php
/* 當 eio_readdir() 完成時呼叫 */
function my_readdir_callback($data, $result) {
echo
__FUNCTION__, " 呼叫\n";
echo
"資料: "; var_dump($data);
echo
"結果: "; var_dump($result);
echo
"\n";
}

eio_readdir("/var/spool/news", EIO_READDIR_STAT_ORDER | EIO_READDIR_DIRS_FIRST,
EIO_PRI_DEFAULT, "my_readdir_callback");
eio_event_loop();
?>

上述範例將輸出類似以下的內容

my_readdir_callback called
data: NULL
result: array(2) {
 ["names"]=>
  array(7) {
   [0]=>
    string(7) "archive"
    [1]=>
    string(8) "articles"
    [2]=>
    string(8) "incoming"
    [3]=>
    string(7) "innfeed"
    [4]=>
    string(8) "outgoing"
    [5]=>
    string(8) "overview"
    [6]=>
    string(3) "tmp"
  }
 ["dents"]=>
  array(7) {
   [0]=>
    array(3)
    {
     ["name"]=>
      string(7)
      "archive"
      ["type"]=>
      int(4)
      ["inode"]=>
      int(393265)
    }
   [1]=>
    array(3)
    {
     ["name"]=>
      string(8)
      "articles"
      ["type"]=>
      int(4)
      ["inode"]=>
      int(393266)
    }
   [2]=>
    array(3)
    {
     ["name"]=>
      string(8)
      "incoming"
      ["type"]=>
      int(4)
      ["inode"]=>
      int(393267)
    }
   [3]=>
    array(3)
    {
     ["name"]=>
      string(7)
      "innfeed"
      ["type"]=>
      int(4)
      ["inode"]=>
      int(393269)
    }
   [4]=>
    array(3)
    {
     ["name"]=>
      string(8)
      "outgoing"
      ["type"]=>
      int(4)
      ["inode"]=>
      int(393270)
    }
   [5]=>
    array(3)
    {
     ["name"]=>
      string(8)
      "overview"
      ["type"]=>
      int(4)
      ["inode"]=>
      int(393271)
    }
   [6]=>
    array(3)
    {
     ["name"]=>
      string(3)
      "tmp"
      ["type"]=>
      int(4)
      ["inode"]=>
      int(393272)
    }
  }
}
新增註釋

使用者貢獻的註釋

此頁面沒有使用者貢獻的註釋。
To Top