无法在PHP代码中运行shell(which)命令

时间:2018-05-07 08:38:49

标签: php shell ssh flyway

所以我正在使用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命令是唯一一个在我的代码中具有null结果的命令。

有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

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

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