(PECL eio >= 0.0.1dev)
eio_readdir — Читает содержимое директории
Читает содержимое директории (посредством системных вызовов
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)
'names'
- массив имён директории
'dents'
- массив структур типа struct
eio_dirent
, каждая из которых представляется массивом с ключами:
'name'
- имя директории;
'type'
- одна из констант EIO_DT_*;
'inode'
- номер узла inode, если доступен, либо пустое
значение;
EIO_READDIR_DIRS_FIRST
(int)
EIO_READDIR_STAT_ORDER
(int)
stat
) каждого из
объектов. Если полученный список имён предполагается передавать в функцию
stat(), порядок следования имён обеспечит наиболее быструю
работу функции.
EIO_READDIR_FOUND_UNKNOWN
(int)
Типы узлов:
EIO_DT_UNKNOWN
(int)
EIO_DT_FIFO
(int)
EIO_DT_CHR
(int)
EIO_DT_MPC
(int)
EIO_DT_DIR
(int)
EIO_DT_NAM
(int)
EIO_DT_BLK
(int)
EIO_DT_MPB
(int)
EIO_DT_REG
(int)
EIO_DT_NWK
(int)
EIO_DT_CMP
(int)
EIO_DT_LNK
(int)
EIO_DT_SOCK
(int)
EIO_DT_DOOR
(int)
EIO_DT_WHT
(int)
EIO_DT_MAX
(int)
Пример #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) } } }