【问题标题】:exec issue with netstat and lsofnetstat 和 lsof 的 exec 问题
【发布时间】:2017-05-02 03:27:43
【问题描述】:

我想使用(以下任何命令)检查 PHP 内部是否存在某个隧道:

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

问题是,当我在 shell 中运行命令时,一切都很好,但是从 php 运行它们就像:

$reply = exec(CMD);

总是什么都不返回。

有什么想法吗?

谢谢!

【问题讨论】:

  • 你为什么用$(which lsof)而不是lsofwhich 将告诉您如果您不包含路径,将运行哪个可执行文件。
  • @moopet 不习惯 exec 调用。在这种情况下,“which”不应该造成任何伤害。
  • 但是为什么你在 exec 调用中有这个习惯呢?我不明白。

标签: php linux bash apache shell


【解决方案1】:

我认为问题更多与 PHP 如何解释您的命令有关...

在这种情况下(假设您在 shell 中编写相同的命令而不是 CMD),它会尝试: $reply = exec($(which lsof) -i -n | grep ssh); 意味着它将尝试将粗体部分替换为 PHP 变量,并尝试执行结果字符串。由于 "-i -n |grep ssh" 的输出为空,因此您什么也得不到。

我建议你改为:

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

【讨论】:

    【解决方案2】:

    您可以将 stderr 重定向到 stdout 并获取 $output$return_var。为此,请像这样更改您的 exec() 调用:

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

    更多关于 exec 的信息在这里:http://php.net/manual/en/function.exec.php(查看$output$return_var 参数)。

    【讨论】:

    • 谢谢。您的代码的结果: int(1) array(0) { }
    • 好的,换句话说它不返回任何东西。我刚刚测试过,它对我有用。您可以尝试使用 php cli 运行此脚本吗? (运行php -a 然后粘贴您的代码)。其他问题:你的 php 版本是什么,是否启用了 safe_mode?​​span>
    • 工作正常(使用 php -a): php > var_dump($return_var); int(0) php > var_dump($输出); array(1) { [0]=> string(112) "ssh 20535 unknown 3u IPv4 5236207 0t0 TCP 192.168.2.100:36330->138.201.117.XXX:ssh (ESTABLISHED)" } php -v 返回 PHP 7.0.8 -3ubuntu3 (cli) ( NTS ) 版权所有 (c) 1997-2016 The PHP Group Zend Engine v3.0.0,版权所有 (c) 1998-2016 Zend Technologies with Zend OPcache v7.0.8-3ubuntu3,版权所有 (c) 1999-2016, Zend Technologies 和关于安全模式:php -i | grep safe sql.safe_mode => 关 => 关
    • 好的,所以我认为这是关于 php-fpm(如果是 nginx)或 mod_php(如果是 apache)的问题。也许您的 http 用户(通常是 www-data)无法运行这种命令? (php cli 是 != php 用于您的 Web 服务器 -> 不同的用户、不同的版本、不同的行为......)
    • 发现了问题,我将所有内容都移到了 sh 文件中,并且 sudo -u www-data ./check_ssh.sh 没有返回任何内容,但是在我的用户名上使用 -u 可以。所以这完全是一个权限问题。
    猜你喜欢
    • 2018-08-29
    • 1970-01-01
    • 1970-01-01
    • 2015-03-18
    • 1970-01-01
    • 2014-07-17
    • 2011-10-29
    • 1970-01-01
    • 2011-09-30
    相关资源
    最近更新 更多