Ожидает, пока вывод потока не совпадёт с одним из шаблонов, либо пока не закончится максимальное время ожидания, либо вернётся EOF

# expect_expectl

(PECL expect >= 0.1.0)

expect_expectl — Ожидает, пока вывод потока не совпадёт с одним из шаблонов, либо пока не закончится максимальное время ожидания, либо вернётся EOF

### Описание

function expect_expectl(resource `$expect`, array `$cases`, array `&$match` = ?): int

Ожидает, пока вывод потока не совпадёт с одним из шаблонов, либо пока не закончится максимальное время ожидания, либо вернётся EOF.

Если задан параметр `match`, то он заполняется с результатами поиска. Совпавшая строка будет сохранена в `match[0]`. Совпавшие подстроки (в зависимости от скобок) в оригинальном шаблоне будут сохранены в `match[1]`, `match[2]`, вплоть до `match[9]` (ограничения libexpect).

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

`expect`
  Поток Expect, открытый с помощью expect_popen().
`cases`

  Массив ожидаемых значений. Каждое ожидаемое значение представляет из себя индексированный массив, описанный в этой таблице:

  Expect Case Array
  Индекс | Тип значения | Описание | Обязательный | Значение по умолчанию
  --- | --- | --- | --- | ---
  0 | string | шаблон, который будет сравниваться с потоком вывода | да |
  1 | mixed | значение, которое вернёт функция, если совпадение найдено | да |
  2 | integer | тип шаблона: `EXP_GLOB`, `EXP_EXACT` или `EXP_REGEXP` | нет | `EXP_GLOB`

### Возвращаемые значения

Возвращает значение, связанное с шаблоном с которым оно совпало.

В случае возникновения ошибки функция вернёт: `EXP_EOF`, `EXP_TIMEOUT` или `EXP_FULLBUFFER`

### Список изменений

Версия | Описание
--- | ---
PECL expect 0.2.1 | До версии 0.2.1, в параметр `match` возвращалась строка, а не массив совпавших строк.

### Примеры

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

    <?php
    // Копируем файлы с сервера:
    ini_set("expect.timeout", 30);

    $stream = fopen("expect://scp user@remotehost:/var/log/messages /home/user/messages.txt", "r");

    $cases = array(
        // array(шаблон, возвращаемов в случае совпадения значение)
        array("password:", "asked for password"),
        array("yes/no)?",  "asked for yes/no")
    );

    while (true) {
        switch (expect_expectl($stream, $cases)) {
            case "asked for password":
                fwrite($stream, "my password\n");
                break;
            case "asked for yes/no":
                fwrite($stream, "yes\n");
                break;
            case EXP_TIMEOUT:
            case EXP_EOF:
                break 2; // Прерывает как switch так и цикл while
            default:
                die("Произошла ошибка!");
        }
    }

    fclose($stream);
    ?>

### Смотрите также

- expect_popen() - Запускает команду через командную оболочку Bourne и открывает для процесса поток PTY

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open