【问题标题】:How to use pipe (" | ") in PHP exec?如何在 PHP exec 中使用管道(“|”)?
【发布时间】:2013-05-19 23:49:50
【问题描述】:

我可以使用 CMD 同时执行两个命令:

command1 | command2

在 PHP 中,我认为它应该可以工作,但它没有:

Shell_exec("command1 | command2 ");

我该如何解决?

【问题讨论】:

  • 使用Shell_exec("command1 & command2 ");
  • 这不需要双管道,如“||”吗?

标签: php command exec


【解决方案1】:

尝试添加大括号:

shell_exec("(command1 | command2)");

PHP 文档中有 a comment 使用 popen 进行一些 I/O 重定向。

【讨论】:

    【解决方案2】:

    试试disabling safe mode


    对于shell_exec()

    注意: 当 PHP 在安全模式运行时,此功能被禁用


    对于system()

    注意:启用安全模式后,您只能执行safe_mode_exec_dir内的文件。出于实际原因,目前不允许在可执行文件的路径中包含.. 组件。

    警告: 启用安全模式后,命令字符串转义escapeshellcmd()。因此,echo y | echo x 变为 echo y \| echo x

    【讨论】:

      【解决方案3】:

      尝试禁用安全模式。

      安全模式将在 PHP 6.0.0 中移除。

      它已经从 Php.ini 中删除了

      【讨论】:

        【解决方案4】:

        这个答案对我帮助很大。尝试添加括号:

        shell_exec("(command1 | command2)");
        

        PHP 文档中有一条注释使用 popen 进行 I/O 重定向:

        shell_exec("(openssl s_client -servername {$domain_name} -connect {$domain_name}:443 2>/dev/null | openssl x509 -noout -enddate | grep notAfter | sed -e s#notAfter=##)");
        

        【讨论】:

          【解决方案5】:

          您可以在命令中尝试; 而不是|。 参考 php.net 上的this 评论。

          【讨论】:

            猜你喜欢
            • 2014-03-16
            • 2016-07-25
            • 1970-01-01
            • 2011-11-05
            • 2017-01-22
            • 1970-01-01
            • 2011-04-25
            • 2016-02-26
            相关资源
            最近更新 更多