【问题标题】:Using bash shell from within PHP在 PHP 中使用 bash shell
【发布时间】:2011-06-09 18:36:12
【问题描述】:

在我的终端窗口(使用 Max OS X)中,我的 shell 是 bash。但是,当我通过 shell_exec 或反引号运算符在 PHP 中运行命令时,我看到 PHP 正在使用 Bourne Shell (sh)。这是我所看到的示例:

在我的终端窗口中:

$ echo $0
- bash

另外,如果我按如下方式调用 php:

$ php -r "echo shell_exec('echo $0');"
-bash

但是,如果我使用以下内容创建一个名为 test.php 的脚本:

<?php echo shell_exec('echo $0'); ?>

然后运行 ​​test php 我得到以下信息:

$ php test.php
sh

我想在调用 shell_exec 时使用 bash shell - 为什么选择 Bourne shell,我可以强制它使用 bash 吗?

谢谢!

【问题讨论】:

    标签: php bash shell


    【解决方案1】:

    它可能会读取 SHELL 环境变量。忽略这一点,putenv() 不起作用。

    尝试使用 bash 运行您想要的命令,例如

    shell_exec("bash script.sh");
    

    【讨论】:

      【解决方案2】:

      假设:

      1. 您的 PHP 脚本由 Web 服务器(例如 Apache)执行
      2. Web 服务器以特殊用户帐户的权限执行,

      一种可能的(但不是最佳的)解决方案是更改执行 Web 服务器的用户帐户的默认 shell。

      【讨论】:

        【解决方案3】:

        反转第二个命令中的引号:

        $ php -r 'echo shell_exec("echo $0");'
        sh
        

        使用问题中的引号,变量$0 在命令发送到php 之前展开。

        如果你想强制使用 Bash,你可以这样做:

        php -r '$cmd="echo \\\$0"; echo shell_exec("/bin/bash -c \"$cmd\"");'
        

        【讨论】:

          猜你喜欢
          • 2020-05-28
          • 1970-01-01
          • 1970-01-01
          • 2015-04-07
          • 2018-04-17
          • 1970-01-01
          • 2021-02-06
          • 1970-01-01
          • 2015-09-03
          相关资源
          最近更新 更多