使用php的shell脚本生成Android apk?

2022-08-30 23:37:41

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

我的 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

外壳脚本输出ls

app autolead_data_format.pdf build build.gradle cheek 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');
   ?>

脚本输出ls

generateApk.sh 生成.php APK

注意:输出文件夹中的文件名ls

我在 xampp 服务器中设置了 shell 脚本的所有文件权限。谁能描述一下我错在哪里?正在等待响应...


答案 1

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


答案 2

似乎在Web服务器中执行的PHP代码中的环境变量比您正在使用的shell中的环境变量更受限制。但是你可以在PHP中更改环境变量,你从它启动的命令将看到这些变化。PATH

<?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脚本的顶部写。如果脚本本身使用它启动的二进制文件的相对路径,则单独使用 shell 脚本的完整路径将无济于事。putenv('PATH=<your_shell_PATH_contents>');


推荐