expect_expectl
(PECL expect >= 0.1.0)
expect_expectl — Ожидает, пока вывод потока не совпадет с одним из шаблонов, либо пока не закончится максимальное время ожидания, либо вернется EOF
Описание
$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