APC 電源バーの電源制御を行う小さなスクリプトを作成しています。スクリプトは完全に機能していますが、24 個のコンセントを持つユニットに拡張しており、スクリプトに各ポートの電源オフ、再起動、および電源オンのセクションを持たせたくないので、ループを使用することにしました。次のように:
for ($Outlet = 1; $Outlet <= 24; $Outlet++) {
//Power On
if(isset($_POST['APCPowerOnA$Outlet'])) {
$shell_command = "snmpset -v 1 -c $community $apc01_ip $mib.$Outlet i 1";
$return=array();
exec($shell_command, $return);
}
//Power Off
if(isset($_POST['APCPowerOffA$Outlet'])) {
$shell_command = "snmpset -v 1 -c $community $apc01_ip $mib.$Outlet i 2";
$return=array();
exec($shell_command, $return);
}
//Reboot
if(isset($_POST['APCPowerRebootA$Outlet'])) {
$shell_command = "snmpset -v 1 -c $community $apc01_ip $mib.$Outlet i 3";
$return=array();
exec($shell_command, $return);
}
このファイルを、ポートごとに次のコードを持つ別のファイルに含めます。
<form method="post" action="[XXX]">
<input type="submit" name="APCPowerOnA1" value="Power On" id="APCPowerOnA1" />
<input type="submit" name="APCPowerOffA1" value="Power Off" id="APCPowerOffA1" />
<input type="submit" name="APCPowerRebootA1" value="Reboot Port" id="APCPowerRebootA1" />
</form>
注意 action="[XXX]" はこのフォーラムの単なるプレースホルダーです。公開フォーラムで URL を提供したくない :)
ポートごとにこれらのいずれかを使用して、ID と名前を 1 ずつインクリメントします (この例ではポート 1)。
スクリプトを実行して、変数 $Outlet を say 1 に置き換えると、ポートはコマンドに応答しますが、ループしようとしても何も動作しないようです。「APCPowerOnA$Outlet」のエコーを実行すると、APCPowerOn1、APCPowerOn2 ... APCPowerOn24 が表示されるのに、なぜ POST が機能しないのですか? 明らかな何かが欠けていますか?
前もって感謝します!