expect_expectl

(PECL expect >= 0.1.0)

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

Описание

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