CakeFest 2024: The Official CakePHP Conference

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
/* Вызывается, когда отработает 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)
    }
  }
}
add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top