いくつかのphpコマンドを実行して、リモート電源スイッチを制御しようとしています。
telnet 接続を確立するために使用している telnet ライブラリがあります: http://www.soucy.org/project/cisco/source.php
私の接続機能は次のようになります。
public function connect()
{
$this->_connection = fsockopen($this->_hostname, $this->_port, $errno, $errstr, $this->_timeout);
if ($this->_connection === false) {
die("Error: Connection Failed for $this->_hostname\n");
} // if
stream_set_timeout($this->_connection, $this->_timeout);
$this->_readTo(':');
if (substr($this->_data, -9) == 'Username:') {
$this->_send($this->_username);
$this->_readTo(':');
} // if
$this->_send($this->_password);
$this->_send(''); //blank space, because we need to press <Enter> for the second login prompt
//Login Second time
$this->_send($this->_username2);
$this->_send($this->_password2);
}
送信機能は次のようになります。
private function _send($command)
{
fputs($this->_connection, $command . "\r\n");
}
したがって、リモート電源スイッチを制御したい場合は、そのためのメニューがあります。このメニューでは、ユーザーは次のようにナビゲートできます。
------- コントロールコンソール ------------------------------------------ --------------
1- Device Manager
2- Network
3- System
4- Logout
<ESC>- Main Menu, <ENTER>- Refresh
1 を押すと、別のメニューに移動します。
- - - - デバイスマネージャ - - - - - - - - - - - - - - - - - - - - - ---------------
1- Bank Monitor
2- Outlet Management
3- Power Supply Status
<ESC>- Back, <ENTER>- Refresh
などなど... したがって、これらの番号を入力するだけで、必要なコンセントにアクセスできます。
コンセントをリロードする機能 (コンセント番号 22):
public function ReloadOutlet22()
{
$this->_send('1'); // Access Device Manager
$this->_send('2'); // Access Outlet Management
$this->_send('1'); // Outlet Control/Configuration
$this->_send(); // '<Enter> to continue'
$this->_send('22'); // Access Outlet number 22
$this->_send('6'); // Delayed Reboot (reboot with 5 sec delay)
$this->_send('YES'); // 'Yes' to continue
$this->_send(); // <Enter> to continue'
//Everything is working till there. I can successfully reload the outlet which I want. After the reload I want to go to the main menu and logout from this console.
$this->_send('\e'); // <Esc> - back
$this->_send('\e'); // <Esc> - back
$this->_send('\e'); // <Esc> - back
$this->_send('\e'); // <Esc> - back
$this->_send('\e'); // <Esc> - back
$this->_send('4'); // Logout
}
だから問題があります。次回、別のアウトレット (たとえば、番号 23 のアウトレット) をリロードしようとすると、APC PDU に正常にログインできません。ログイン プロンプトで、'\e' をユーザー名とパスワードとして使用しようとしたことがわかります。
では、リロードが成功した後にコードが正常に機能しないのはなぜでしょうか? メインメニューに戻ってログアウトできないのはなぜですか?
お時間をいただきありがとうございます。