(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
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).
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:
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
ou
EXP_REGEXP
|
não | EXP_GLOB |
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
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.
|
Exemplo #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);
?>