我试图从外壳脚本生成安卓apk
文件,我想从PHP执行一个外壳脚本文件。当我在终端中运行shell脚本时,它工作得很好。如果我尝试使用PHP运行脚本,shell脚本不会执行所有命令。脚本中的PHP 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-gradle.properties-and.iml settings.gradle
我的PHP脚本
<?php
echo shell_exec('ls');
echo shell_exec('./generateApk.sh');
?>
PHP脚本ls
输出
generateApk.sh generate.php应用程序包
注意:ls
输出文件夹中的文件名
我在xampp服务器中设置了shell脚本的所有文件权限。有谁能描述一下我哪里错了吗?正在等待响应...
发布于 2017-04-28 20:31:49
只需使用脚本/可执行文件的完整路径,因为从php运行时环境是不同的。
发布于 2017-04-29 01:03:53
似乎PHP代码中在web服务器中执行的PATH
环境变量比您正在工作的shell中的环境变量有更多的限制。但是您可以在PHP中更改环境变量,从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脚本的完整路径是没有帮助的。
https://stackoverflow.com/questions/43633044
复制相似问题