expect_expectl
(PECL expect >= 0.1.0)
expect_expectl — Espera até que a saída de um processo corresponda a um dos padrões, um período de tempo especificado tenha passado ou um EOF seja alcançado
Descrição
Espera até que a saída de um processo corresponda a um dos padrões, um período de tempo especificado tenha passado ou um EOF seja alcançado.
Se match
for fornecido, então ele será preenchido com o resultado da pesquisa.
A string correspondente pode ser encontrada em match[0]
.
As substrings de correspondência (de acordo com os parênteses) no padrão original podem ser encontradas
em match[1]
, match[2]
e assim por
diante, até match[9]
(a limitação do libexpect).
Parâmetros
expect
-
Um fluxo Expect, previamente aberto com expect_popen().
cases
-
Um array de casos Expect. Cada caso é um array indexado, como descrito na tabela a seguir:
Array de Casos Expect Chave do Índice Tipo do Valor Descrição Mandatório Valor Padrão 0 string padrão que será comparado com a saída do fluxo sim 1 mixed valor que será retornado por esta função se o padrão for correspondido sim 2 inteiro tipo do padrão, uma das opções: EXP_GLOB
,EXP_EXACT
ouEXP_REGEXP
não EXP_GLOB
Valor Retornado
Retorna o valor associado com o padrão que foi correspondido.
Em caso de falha, esta função retorna:
EXP_EOF
,
EXP_TIMEOUT
ou
EXP_FULLBUFFER
Registro de Alterações
Versão | Descrição |
---|---|
PECL expect 0.2.1 |
Antes da versão 0.2.1, uma string de correspondência era retornada no parâmetro match ,
e não um array de substrings correspondidas.
|
Exemplos
Example #1 Exemplo de expect_expectl()
<?php
// Copia arquivo do servidor remoto:
ini_set("expect.timeout", 30);
$stream = fopen("expect://scp user@remotehost:/var/log/messages /home/user/messages.txt", "r");
$cases = array(
// array(padrão, valor a retornar se houver correspondência)
array("senha:", "pediu senha"),
array("sim/não)?", "perguntou sim ou não")
);
while (true) {
switch (expect_expectl($stream, $cases)) {
case "pediu senha":
fwrite($stream, "minha senha\n");
break;
case "perguntou sim ou não":
fwrite($stream, "sim\n");
break;
case EXP_TIMEOUT:
case EXP_EOF:
break 2; // sai do switch e do while
default:
die("Ocorreu um erro!");
}
}
fclose($stream);
?>