使用来自php的shell脚本生成android apk?

时间:2017-04-26 11:34:46

标签: php android linux bash shell

我正在尝试从shell脚本生成Android apk文件,我想从PHP执行shell脚本文件。当我在终端中运行shell脚本时,它完美地运行。如果我尝试使用PHP运行脚本,则shell脚本不会执行所有命令。 shell脚本中的 ls 命令工作正常,但在使用PHP执行时,其他命令不起作用。我在Linux环境中使用xampp服务器。

我的shell脚本

cd /home/user/AndroidStudioProjects/msvep4247-inghamautogroup-pulse-and/
./gradlew assembleDebug
cp -fr app/build/outputs/apk/app-debug.apk /opt/lampp/htdocs/sample/apk
ls

Shell脚本ls输出

  

app autolead_data_format.pdf build build.gradle cheek gradle   gradle.properties gradlew gradlew.bat lib local.properties   msvep4247-inghamautogroup-pulse-and.iml settings.gradle

我的PHP脚本

   <?php
      echo shell_exec('ls');
      echo shell_exec('./generateApk.sh');
   ?>

PHP脚本ls输出

  

generateApk.sh generate.php APK

注意:ls输出文件夹

中的文件名

我在xampp服务器中设置了shell脚本的所有文件权限。任何人都可以描述我错在哪里吗?等待回复...

2 个答案:

答案 0 :(得分:11)

只需使用脚本/可执行文件的完整路径,因为从php运行时环境不同。

答案 1 :(得分:3)

在Web服务器中执行的PHP代码中的PATH环境变量似乎比您正在使用的shell中的环境变量更有限。但您可以在PHP中更改环境变量,以及命令你从它开始会看到这些变化。

<?php
// set content type so the output is more readable in the browser
header('Content-Type: text/plain');
// set $PATH to some limited value
putenv('PATH=/bin:/sbin');
// verify, note that we have to use full path to 'env'
print(shell_exec("/usr/bin/env|grep '^PATH='"));
// this command won't run (assuming its full path is /usr/bin/id)
print(shell_exec("id"));
// add more directories to $PATH
putenv('PATH=/bin:/sbin:/usr/bin:/usr/sbin');
// verify again, we can use env without specifying the path this time
print(shell_exec("env|grep '^PATH='"));
// this command will
print(shell_exec("id"));

所以你必须在PHP脚本的顶部写putenv('PATH=<your_shell_PATH_contents>');。如果脚本本身使用它启动的二进制文件的相对路径,则单独使用shell脚本的完整路径将无济于事。