Генерировать 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. Может кто-нибудь объяснит, где я ошибаюсь? В ожидании ответов...

Author: Keerthivasan, 2017-04-26

2 answers

Просто используйте полный путь к скрипту/исполняемому файлу, потому что среда отличается при запуске с php.

 11
Author: TMS, 2017-04-28 12:31:49

Похоже, что 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-скрипта. Использование полного пути только к сценарию оболочки не поможет, если сам сценарий использует относительные пути к двоичным файлам, которые он запускает.

 3
Author: Macaronio, 2017-04-28 17:03:53