2016-12-16 3 views
0

lsofの私は、特定のトンネルが(これらのコマンドのいずれか)を使用してPHP内部から存在しているかどうかを確認したい:execのnetstatコマンドで問題と

$(which lsof) -i -n | grep ssh 
$(which netstat) -a | grep "localhost:ssh" 

問題は、私はシェルのすべてのコマンドを実行したときであるということですしかし、それらを実行しているPHPから:

$reply = exec(CMD); 

いつも何も返しません。

アイデア?

ありがとうございました!

+0

を使用すると、 ''ではなく 'lsof'の(LSOF)$を使用しているのはなぜ?とにかくパスを含めなかった場合に実行可能な実行可能ファイルを示す ''は ''でしょう。 – moopet

+0

@moopetはexecコールの習慣から外れています。 "これは非常に危険なことではありません。 –

+0

しかし、なぜあなたはexecコールでその習慣を持っていますか?わかりません。 – moopet

答えて

0

stderrをstdoutにリダイレクトし、$output$return_varを取得できます。これを行うには、あなたのexecを変更()のように呼び出します。ここでのexecについて

exec('$(which lsof) -i -n | grep ssh 2>&1', $output, $return_var); 

var_dump($return_var); 
var_dump($output); 

詳細情報:http://php.net/manual/en/function.exec.php$output$return_varパラメータを見て)。

+0

ありがとうございます。あなたのコードの結果: int(1) 配列(0){ } –

+0

つまり、何も返されません。私はちょうどそれをテストした、それは私のために働く。 php cliでこのスクリプトを実行しようとしますか? ( 'php -a'を実行してコードを貼り付けます)。その他の質問:PHPのバージョンは何ですか?safe_modeは有効ですか? –

+0

うまく動作します(php -a):php> var_dump($ return_var); (0) php> var_dump($ output); アレイ(1){ [0] => 列(112)の "SSH 20535不明3UのIPv4 5236207 0t0 TCP 192.168.2.100:36330->138.201.117.XXX:ssh(ESTABLISHED)" } PHP - v Zend Technologies v3.0.0、Copyright(c)1998-2016 Zend Technologies Zend OPcache v7.0.8を使用しています。 -3ubuntu3、Copyright(c)1999-2016、Zend Technologies、およびセーフモードについて:php -i | grep safe sql.safe_mode => Off => Off –

0

私は問題はPHPがあなたのコマンドを解釈する方法で行うことが多いと思います...この場合

(仮定の代わりにCMDあなたがシェルで試す同じコマンドを書く)、それはしようとするだろう: $ reply = exec($(whichsoso) -i -n | grep ssh); は太字部分をPHP変数に置き換えて、結果の文字列を実行しようとします。 "-i -n | grep ssh"の出力がnullであるため、結果として何も得られません。

私が代わりにあなたを示唆している:

$lsof = exec(which lsof); 
$reply = exec($lsof -i -n | grep ssh); 
+0

実際にはありません。 PHPのドキュメントとシェル構文を読んでください –