2

Ciscoスイッチのポートを無効/有効にするために使用する簡単なPHPサイトを作成しました。php関数exec()を介して2つの引数(ポートとアクション)をbashスクリプトに渡します。デバッグのために、bashスクリプト内の最後にこれらの引数を設定しました。

私が呼び出しているphp関数の重要な部分は次のようになります。

function PortAction($port, $action){
    echo "<hr /> Port:".$port."<br />Action:".$action;
    chdir('/usr/local/icinga-1.7.0/videowand/');
    echo exec('sh /usr/local/icinga-1.7.0/videowand/action2.sh 2>&1',$output, $return);
    echo "Return / Output: ".$return;
    print_r($output);    
}

bashスクリプト「action2.sh」:

#!/bin/bash
/usr/libexec/rancid/clogin -c "conf t; int Fa0/1; shutdown" 192.168.6.6

apacheユーザーとしてbashスクリプトを手動で(または直接cloginコマンドでさえ)実行すると、すべてが期待どおりに機能し、ポートが無効になります。しかし、PHP関数を介して呼び出すとすぐに、次の出力が得られます。

配列([0]=>そのような変数はありません[1]=>( "env(HOME)"のトレースを読み取ります)[2]=>[3]内から呼び出されます=>"set password_file $ env(HOME)/。cloginrc "[4] =>(ファイル" / usr / libexec / rancid / clogin "行66)

そして、何も行われません。これは、パスワード入力に問題があることを示しています(私が見る限り)。このファイルのアクセス許可は正しいです。そうしないと、シェル内で直接機能しない可能性があります。-fスイッチを使用して.cloginrcパスを変更しようとしても、成功しませんでした。PHPセーフモード:オフ表示エラー:オン

telnet接続を開く必要があるため、スクリプトにはしばらく時間がかかります。これが、これを別のbashスクリプトに入れる理由です。

4

1 に答える 1

1

sh次のように、バイナリへのフル パスを指定します。

echo exec('/bin/sh /usr/local/icinga-1.7.0/videowand/action2.sh 2>&1',$output, $return);

/bin/shこれは一般的にshの標準パスであるため、上記を想定していますが、
which shコマンドで確認してください。

/bin/shはシェルへのソフト リンクで、通常はです。バイナリのソフト リンクを使用できる/bin/bashかどうかはわかりません。したがって、上記が機能しない場合は、代わりにexec()/bin/bash/bin/sh

于 2012-12-03T08:45:28.303 に答える