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


(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)     }   } }