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 user@remotehost:/var/log/messages /home/user/messages.txt", "r");
$cases = array(
// array(pattern, value to return if pattern matched)
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 both the switch statement and the while loop
default:
die("Error has occurred!");
}
}
fclose($stream);
?>