使用shell脚本从php生成Androidapk?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (16)

我试图apk从shell脚本生成Android 文件,我想从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.gradle脸颊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脚本设置了所有文件权限。

提问于
用户回答回答于

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

用户回答回答于

看起来,PATHPHP代码中的环境变量在Web服务器中执行的环境变量比你工作的环境变量更有限。但是你可以更改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"));

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

扫码关注云+社区