PHP 8.5.0 Alpha 2 available for testing

Expect Usage Examples

Example #1 Expect Usage Example

This example connects to the remote host via SSH, and prints the remote uptime.

<?php
ini_set
("expect.loguser", "Off");

$stream = fopen("expect://ssh root@remotehost uptime", "r");

$cases = array (
array (
0 => "password:", 1 => PASSWORD)
);

switch (
expect_expectl ($stream, $cases)) {
case
PASSWORD:
fwrite ($stream, "password\n");
break;

default:
die (
"Error was occurred while connecting to the remote host!\n");
}

while (
$line = fgets($stream)) {
print
$line;
}
fclose ($stream);
?>

The following example connects to the remote host, determines whether installed OS is for 32 or 64 bit, then runs update for specific package.

Example #2 Another Expect Usage Example

<?php
ini_set
("expect.timeout", -1);
ini_set("expect.loguser", "Off");

$stream = expect_popen("ssh root@remotehost");

while (
true) {
switch (
expect_expectl ($stream, array (
array (
"password:", PASSWORD), / SSH is asking for password
array ("yes/no)?", YESNO), / SSH is asking whether to store the host entry
array ("~$ ", SHELL, EXP_EXACT), / We've got the shell!
))) {
case
PASSWORD:
fwrite ($stream, "secret\n");
break;

case
YESNO:
fwrite ($stream, "yes\n");
break;

case
SHELL:
fwrite ($stream, "uname -a\n");
while (
true) {
switch (
expect_expectl ($stream, array (
array (
"~$ ", SHELL, EXP_EXACT), / We've got the shell!
array ("^Linux.*$", UNAME, EXP_REGEXP), / uname -a output
), $match)) {
case
UNAME:
$uname .= $match[0];
break;

case
SHELL:
/ Run update:
if (strstr ($uname, "x86_64")) {
fwrite ($stream, "rpm -Uhv http://mirrorsite/somepath/some_64bit.rpm\n");
} else {
fwrite ($stream, "rpm -Uhv http://mirrorsite/somepath/some_32bit.rpm\n");
}
fwrite ($stream, "exit\n");
break
2;

case
EXP_TIMEOUT:
case
EXP_EOF:
break
2;

default:
die (
"Error has occurred!\n");
}
}
break
2;

case
EXP_TIMEOUT:
case
EXP_EOF:
break
2;

default:
die (
"Error has occurred!\n");
}
}

fclose ($stream);
?>
add a note

User Contributed Notes 1 note

up
4
David dkxl
12 years ago
If using the examples with telnet instead of ssh, note that telnet may need \r (Carriage Return) instead of \n (New Line)
To Top

Follow Lee on X/Twitter - Father, Husband, Serial builder creating AI, crypto, games & web tools. We are friends :) AI Will Come To Life!

Check out: eBank.nz (Art Generator) | Netwrck.com (AI Tools) | Text-Generator.io (AI API) | BitBank.nz (Crypto AI) | ReadingTime (Kids Reading) | RewordGame | BigMultiplayerChess | WebFiddle | How.nz | Helix AI Assistant