eio_readdir

(PECL eio >= 0.0.1dev)

eio_readdir Читает содержимое директории

Описание

resource eio_readdir ( string $path , int $flags , int $pri , callable $callback [, string $data = NULL ] )

Читает содержимое директории (посредством системных вызовов opendir, readdir и closedir) и либо возвращает имена файлов, либо передает массив в качестве аргумента result в функцию callback. Поведение метода зависит от значения параметра flags.

Список параметров

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 в случае ошибки. Также может задавать значение аргумента result функции callback в зависимости от значения параметра flags:

EIO_READDIR_DENTS (integer)
Флаг eio_readdir(). Если задан, в качестве аргумента callback-функции будет передаваться массив со следующими ключами: 'names' - массив имен директории 'dents' - массив структур типа struct eio_dirent, каждая из которых представляется массивом с ключами: 'name' - имя директории; 'type' - одна из констант EIO_DT_*; 'inode' - номер узла inode, если доступен, либо пустое значение;
EIO_READDIR_DIRS_FIRST (integer)
Если этот флаг задан, первыми будут возвращаться имена директорий, затем имена файлов. Порядок следования имен в каждой группе будет оптимальным для применения фукнции stat.
EIO_READDIR_STAT_ORDER (integer)
Если этот флаг задан, имена файлов и директорий будут возвращаеться в порядке, удобном для сбора статистики (stat) каждого из объектов. Если полученный список имен предполагается передавать в функцию stat(), порядок следования имен обеспечит наиболее быструю работу фукнции.
EIO_READDIR_FOUND_UNKNOWN (integer)

Node types:

EIO_DT_UNKNOWN (integer)
Неизвестный тип узла (очень часто). Необходима обработка функцией stat().
EIO_DT_FIFO (integer)
Тип узла - FIFO
EIO_DT_CHR (integer)
Тип узла
EIO_DT_MPC (integer)
Тип узла - составное символьное устройство (v7+coherent)
EIO_DT_DIR (integer)
Тип узла - директория
EIO_DT_NAM (integer)
Тип узла - файл со специальным Xenix наименованием
EIO_DT_BLK (integer)
Тип узла
EIO_DT_MPB (integer)
Составное блочное устройство (v7+coherent)
EIO_DT_REG (integer)
Тип узла
EIO_DT_NWK (integer)
EIO_DT_CMP (integer)
Специальный тип узла для сетей HP-UX
EIO_DT_LNK (integer)
Тип узла - ссылка
EIO_DT_SOCK (integer)
Тип узла - сокет
EIO_DT_DOOR (integer)
Тип узла - Solaris door
EIO_DT_WHT (integer)
Тип узла
EIO_DT_MAX (integer)
Максимальное значение типа узла

Примеры

Пример #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
данные: NULL
результат: 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)
    }
  }
}