Генерировать android apk с помощью сценария оболочки из php?

17

Я пытаюсь создать файлы 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 output

  

app autolead_data_format.pdf build build.gradle cheek 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 output

  

generateApk.sh generate.php APK

Примечание: ls выводит имена файлов в папке

Я установил все разрешения на файл для сценария оболочки на сервере xampp. Может ли кто-нибудь описать, где я ошибаюсь? Ожидает ответов ...

    
задан Keerthivasan 26.04.2017 в 13:34
источник
  • 'Не выполняет' ... Любая ошибка? –  modsfabio 26.04.2017 в 13:35
  • Можете ли вы проверить, работает ли это? $ output = shell_exec ('./ generateApk.sh'); echo $ output "; –  Zumo de Vidrio 26.04.2017 в 13:37
  • @ZumodeVidrio уже проверено, но не работает –  Keerthivasan 26.04.2017 в 13:38
  • Поделитесь своим выходом ls -ls для обоих сценариев –  Zumo de Vidrio 26.04.2017 в 13:40
  • @modsfabio выполняет скрипт, но не все команды –  Keerthivasan 26.04.2017 в 13:46
Показать остальные комментарии

2 ответа

11

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

    
ответ дан TMS 28.04.2017 в 14:31
  • полный путь - shell_exec ('/ opt / lampp / htdocs / sample / generateApk.sh'); –  Keerthivasan 28.04.2017 в 14:39
  • Если вы не хотите жестко закодировать путь, вы можете использовать dirname - dirname (__ FILE__) –  DeeBee 04.05.2017 в 04:47
3

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

    
ответ дан Macaronio 28.04.2017 в 19:03