expect_expectl
(PECL expect:0.1-0.2.2)
expect_expectl — Waits until the output from a process matches one
of the patterns, a specified time period has passed, or an EOF is seen
Description
int expect_expectl
( resource $expect
, array $cases
[, array &$match
] )
If match
is provided, then it is filled with the result of search.
The matched string can be found in match[0]
.
The match substrings (according to the parentheses) in the original pattern can be found
in match[1]
, match[2]
, and so
on, up to match[9]
(the limitation of libexpect).
Parameters
-
expect
-
An Expect stream, previously opened with
expect_popen().
-
cases
-
An array of expect cases. Each expect case is an indexed array,
as described in the following table:
Expect Case Array
Index Key |
Value Type |
Description |
Is Mandatory |
Default Value |
0 |
string |
pattern, that will be matched against the output from the stream |
yes |
|
1 |
mixed |
value, that will be returned by this function, if the pattern matches |
yes |
|
2 |
integer |
pattern type, one of:
EXP_GLOB,
EXP_EXACT
or
EXP_REGEXP
|
no |
EXP_GLOB |
Examples
Example #1 expect_expectl() example
<?php
// Copies file from remote host:
ini_set ("expect.timeout", 30);
$stream = fopen ("expect://scp [email protected]:/var/log/messages /home/user/messages.txt", "r");
$cases = array (
array (0 => "password:", 1 => PASSWORD),
array (0 => "yes/no)?", 1 => YESNO)
);
while (true) {
switch (expect_expectl ($stream, $cases))
{
case PASSWORD:
fwrite ($stream, "password\n");
break;
case YESNO:
fwrite ($stream, "yes\n");
break;
case EXP_TIMEOUT:
case EXP_EOF:
break 2;
default:
die ("Error has occurred!\n");
}
}
fclose ($stream);
?>