Генерировать android apk с помощью скрипта оболочки из php?
Я пытаюсь сгенерировать файлы Android apk
из сценария оболочки, я хочу выполнить файл сценария оболочки из PHP. Когда я запускаю сценарий оболочки в терминале, он работает отлично. Если я попытаюсь запустить скрипт с помощью PHP, сценарий оболочки не выполнит все команды. Команда ls в скрипте оболочки работает отлично, но при выполнении с использованием PHP другие команды не работают. Я использую сервер xampp в среде Linux.
Мой сценарий оболочки
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
вывод
Приложение autolead_data_format.pdf сборка сборка.gradle для сортировки gradle.свойства gradlew gradlew.bat библиотека локальная.свойства msvep4247-inghamautogroup-импульсные и.настройки iml.gradle
Мой PHP-скрипт
<?php
echo shell_exec('ls');
echo shell_exec('./generateApk.sh');
?>
PHP-скрипт ls
вывод
GenerateApk.sh generate.php APK
Примечание: ls
выводит имена файлов в папке
Я установил все права доступа к файлам для сценария оболочки на сервере xampp. Может кто-нибудь объяснит, где я ошибаюсь? В ожидании ответов...
2 answers
Просто используйте полный путь к скрипту/исполняемому файлу, потому что среда отличается при запуске с php.
Похоже, что PATH
переменная среды в 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"));
Поэтому вам нужно написать putenv('PATH=<your_shell_PATH_contents>');
в верхней части вашего PHP-скрипта. Использование полного пути только к сценарию оболочки не поможет, если сам сценарий использует относительные пути к двоичным файлам, которые он запускает.