這是 php 官網的例子
<pre class="c" name="code">
<?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);
?>
我有幾個問題想請問
1.expect.loguser(範例程式第一行),這個也是灌了expect才有用的嗎??
2.我灌了後,是不是也可以用網頁去跑(就是執行過程都是網頁呈現)??
3.有簡單的範例嗎?(php 搭配 expect 連到 switch 或 router 的範例)
我目前是可以用php連到設備去
但是是透過
php_ssh2搭配
fwrite($shell,$cmd . "\n");
sleep( 3 );
去寫資料
因為想說
expect是期待什麼 符號
就送出什麼命令
遠比用sleep來控制寫入的東西好
才會想把
fwrite,sleep
改成
expect
的
不過話說回來,我看你應該是要用 ssh 連到機器上,下一些指令吧?這個應該可以用 script 命令檔直接辦到,不懂為什麼要模擬真人登入跟機器對話耶?
wiseguy兄
我目前的作法就是你說的
用瀏覽器連到server去執行那支php啊,而且全部過程都echo出來,並把有問題的紅色標記,分別存入不同的資料表中啊,因為我去pecl的官網下載expect,解壓後,並沒有php_expect.dll檔案,所以無法掛在php.ini裡啊
好吧~ 雖然你寫到『要把有問題的紅色標記,分別存入不同的資料表中』我還是不知道為什麼要『用瀏覽器連到server去執行那支php 並整個 echo 出來』這麼麻煩,直接用 php.exe 去執行程式不是單純多了?不過你願意這麼做我也沒話說。
php_expect.dll 是 pecl,並非官方的程式,所以 php 官方沒有預編譯的 dll 檔,你得自己去找,或者自己去 pecl.php.net 抓原始碼來編譯。
這是 expect (pecl 的官方網站有)
http://pecl.php.net/package/expect
下載下來的檔案
以下是壓縮檔的內容
2011-11-23 00:27 1856 0 package.xml
2011-11-23 00:27 1287 0 expect-0.3.1\config.m4
2011-11-23 00:27 387 0 expect-0.3.1\config.w32
2011-11-23 00:27 10995 0 expect-0.3.1\expect.c
2011-11-23 00:27 4512 0 expect-0.3.1\expect.dsp
2011-11-23 00:27 2615 0 expect-0.3.1\expect_fopen_wrapper.c
2011-11-23 00:27 2259 0 expect-0.3.1\php_expect.h
請問要如何編譯呢
請問
wiseguy兄
您有曾經在windows底下用php跑過expect的經驗嗎
謝謝您
官方站有教怎麼安裝編譯環境,麻煩你自行參閱囉。
不好意思,不只是 windows,我在 Linux 也沒用過 expect。我不知道你用 expect 是不是有絕對非它不可的必要性。我已經有說明,如果你是要用 ssh 連進機器去執行指令,這個目的可以直接用 ssh 做,完全不必透過 expect 去跟介面對話。因為我都是這麼做的,所以我沒用過 expect。
您說您用ssh
所以您也是設sleep來讓區隔下指令和顯示嗎
有時候我的程式會登入失敗
根本沒進設備
如果為了保險,把sleep設大
執行時間又會拉長
所以才覺得很頭大