eio_readdir

(PECL eio >= 0.0.1dev)

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

Описание

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

Читает содержимое директории (посредством системных вызовов 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 (int)
Флаг eio_readdir(). Если задан, в качестве аргумента callback-функции будет передаваться массив со следующими ключами: '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 (int)
Тип узла
EIO_DT_MPC (int)
Тип узла - составное символьное устройство (v7+coherent)
EIO_DT_DIR (int)
Тип узла - директория
EIO_DT_NAM (int)
Тип узла - файл со специальным Xenix наименованием
EIO_DT_BLK (int)
Тип узла
EIO_DT_MPB (int)
Составное блочное устройство (v7+coherent)
EIO_DT_REG (int)
Тип узла
EIO_DT_NWK (int)
EIO_DT_CMP (int)
Специальный тип узла для сетей HP-UX
EIO_DT_LNK (int)
Тип узла - ссылка
EIO_DT_SOCK (int)
Тип узла - сокет
EIO_DT_DOOR (int)
Тип узла - Solaris door
EIO_DT_WHT (int)
Тип узла
EIO_DT_MAX (int)
Максимальное значение типа узла

Примеры

Пример #1 Пример использования eio_readdir()

<?php

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) } } }
To Top