【问题标题】:Cannot run shell (which) command in PHP code无法在 PHP 代码中运行 shell (which) 命令
【发布时间】:2018-05-07 16:45:10
【问题描述】:

所以我正在使用 Flyway 并使用 PHP exec() 函数运行特定命令:

exec('/path/absolute/flyway info');

只要我指定了绝对路径,这些命令就可以工作,但这可能会因它将在其上工作的机器而异。这就是为什么我想使用一个变量来确定绝对路径,通过命令exec('which flyway')

问题是它返回一个空值,即使当我直接在 shell 中编写它时,我也得到了想要的结果。我还尝试使用 php 交互式 shell php -a,如果我在其中运行命令 echo exec('which flyway'),它也会返回所需的路径,尽管当我直接在我的代码中编写它时,我得到 NULL 结果。

请注意,如果我想验证 php (which php) 的绝对路径,我可以在 shell、php -a 或我的代码中执行此操作,并且在所有三种情况下都会返回所需的结果。所以which flyway 命令是我的代码中唯一一个结果为空的命令。

谁能帮我解决这个问题?

【问题讨论】:

    标签: php shell ssh flyway


    【解决方案1】:

    which 使用与在没有绝对路径的情况下运行命令时相同的路径变量。所以,要么你可以直接使用它们(因为它们在路径上)并且毕竟不需要which,或者which毕竟无法找到可执行文件。

    此外,请记住,并非所有主机都允许从 PHP 进程任意运行。你不应该在这样的基础上构建你的应用程序

    【讨论】:

    • 如果我不指定硬编码的绝对路径,flyway 命令将不起作用。这就是为什么我想创建一个变量来替换它,所以它不再是硬编码的。有人告诉我,我可以执行exec('$(which flyway) info', $output, $result) 之类的操作,但这也会返回空响​​应
    • 那你为什么不用它呢?是的,它不能通过which 完成,但可能您只需要手动配置该变量
    • 我告诉过你,因为我不想有硬编码的路径,而是使用动态变量。 PS我从上面编辑了评论。
    • 我明白这一点,但正如我所写,除非您将 flyway 放入服务器的 PATH 变量中,否则无法使用 which
    • flyway 的路径设置为配置选项,如果您的项目是库,则应在系统安装阶段或构造函数参数中提供该选项。
    猜你喜欢
    • 2022-11-28
    • 2011-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-17
    相关资源
    最近更新 更多