Подтвердить что ты не робот

Создайте андроид apk, используя оболочку script из php?

Я пытаюсь создать файлы Android apk из оболочки script, я хочу выполнить файл оболочки script с PHP. Когда я запускаю оболочку script в терминале, она работает отлично. Если я пытаюсь запустить script с помощью PHP, оболочка script не выполняет все команды. Команда ls в оболочке script работает отлично, но при выполнении с использованием PHP другие команды не работают. Я использую сервер xampp в среде Linux.

Моя оболочка script

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 script 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 вывод

generateApk.sh generate.php APK

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

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

4b9b3361

Ответ 1

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

Ответ 2

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