(PECL expect >= 0.1.0)
expect_expectl — Espera a que la salida de un proceso coincida con un patrón, se supere un determinado periodo de tiempo, o se alcance un EOF
$expect
   , array $cases
   [, array &$match
  ] ) : intEspera a que la salida de un proceso coincida con un patrón, se supere un determinado periodo de tiempo, o se alcance un EOF.
   Si se proporciona el parámetro match, se le asignará el resultado de la
   búsqueda. La cadena que coincide se encuentra en match[0].
   Las subcadenas que coincidan (de acuerdo a los paréntesis) con el patrón original se encuentran
   en match[1], match[2], y así
   hasta match[9] (límite establecido por libexpect).
  
expectFlujo de Expect, abierto anteriormente con expect_popen().
casesMatriz con casos de expect. Cada caso será un array indexado, tal como se describe en la siguiente tabla:
| Clave de índice | Tipo de valor | Descripción | Es Obligatorio | Valor por omisión | 
|---|---|---|---|---|
| 0 | string | patrón, que buscará coincidencias en la salida del flujo | sí | |
| 1 | mixto | valor, que devolverá esta función, si coincidiera el patrón | sí | |
| 2 | integer | tipo de patrón, de entre: EXP_GLOB,EXP_EXACToEXP_REGEXP | no | EXP_GLOB | 
Devuelve valores asociados con el patrón que coincida.
   En caso de error esta función devuelve:
   EXP_EOF,
   EXP_TIMEOUT
   o
   EXP_FULLBUFFER
  
| Versión | Descripción | 
|---|---|
| 0.2.1 | Antes de la versión 0.2.1, en el parámetro matchse devolvía el string que
        coincidiera, no un array de substrings coincidentes. | 
Ejemplo #1 Ejemplo de expect_expectl()
<?php
// Copias de los archivos de host remoto:
ini_set("expect.timeout", 30);
$stream = fopen("expect://scp user@remotehost:/var/log/messages /home/user/messages.txt", "r");
$cases = array(
    // array(patrón, valor que se devolverá si el patrón es encontrado)
    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; // break tanto la sentencia switch y el bucle while
        default:
            die "Error has occurred!";
    }
}
fclose($stream);
?>