通过 PHP shell_exec() 执行时未找到命令

通过 PHP shell_exec() 执行时未找到命令

我想使用 php 在我的 Ubuntu 服务器上执行以下命令:

android create project --target 8 --name $fname --path ./$fname --activity MainActivity --package $fpack 2>&1

上述命令用于创建一个 Android 应用项目。因此,当我在终端上输入此命令时,它可以正常工作,但是当我通过 PHP 执行它时:

<?php
$fname = $_POST['fname'];
$fpack = $_POST['fpack'];
$email = $_POST['email'];

// Creating a new Android project.
var_dump(shell_exec("android create project --target 8 --name $fname --path ./$fname --activity MainActivity --package $fpack 2>&1"));

?>

当我运行 PHP 脚本时,我得到以下输出:

string(26) "sh: 1: android: not found "

为什么当我手动输入终端(从用户“ashish”帐户)时可以工作,但使用 php 却不行?我的 apache 用户和组是相同的(ashish)。任何帮助都将不胜感激 :)

答案1

这个问题有点老了,但是对于那些遇到此问题的人,可以尝试在服务器上直接设置环境变量。PHP 使用 putenv() 函数。

例如:// 设置变量环境

$JAVA_HOME = "/usr/lib/jvm/java-8-oracle"; 
$ANDROID_HOME = "/opt/android-sdk-linux";
$PATH="$JAVA_HOME/bin:/usr/local/bin:/usr/bin:/bin:$ANDROID_HOME/platform-tools:$ANDROID_HOME/tools:$ANDROID_HOME/build-tools/24.0.0-preview";

putenv ("JAVA_HOME = $JAVA_HOME"); 
putenv ("PATH = $PATH");

答案2

最有可能的是,您的 $PATH 设置不正确。指定 的完整路径android,或通过以下方式设置您的路径:

<?php
putenv(
    implode(PATH_SEPARATOR, array('/dir/containing/android', getenv('PATH')))
);

$fname = $_POST['fname'];
$fpack = $_POST['fpack'];
$email = $_POST['email'];

// Create a new Android project
var_dump(shell_exec("android create project --target 8 --name $fname --path ./$fname --activity MainActivity --package $fpack 2>&1"));

相关内容