0

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 が機能しないのですか? 明らかな何かが欠けていますか?

前もって感謝します!

4

1 に答える 1

3

変数が文字列内で補間されるようにするには、二重引用符が必要です。

$_POST['APCPowerOnA$Outlet'] =>  $_POST["APCPowerOnA$Outlet"]

または、文字列連結を使用できます。

$_POST['APCPowerOnA' . $Outlet]

これらのいずれかを行わないと、文字通り index にアクセスすることになりますAPCPowerOnA$Outlet

于 2013-01-04T19:13:48.697 に答える