PHP exe c вывод отличается от вывода командной строки? - PullRequest
0 голосов
/ 26 апреля 2020

Контекст: У меня есть простой html внешний интерфейс, который позволяет пользователю вводить некоторые базовые c детали, например, используемые цвета. Затем он помещается в мой файл strings. xml, так что мы можем быстро извлечь sh предварительных версий. Windows 10 64-битный работающий WAMP, сборка с Gradle 3.6.

Цель: Создать обновленное приложение из командной строки с помощью PHP.

Проблема: Проект компилируется правильно, когда я собираюсь вручную через командную строку, но сборка завершается неудачно, когда я использую функцию PHP exe c.

Обертка gradle должна быть выполнена из папки базового проекта, поэтому необходимо cd ...

Сначала я очищаю проект, поэтому я делаю: cd path/to/projectdir && gradlew clean 2>&1, который работает, как ожидается, из exe c и командной строки.

Далее стоит построить с cd path/to/projectdir && gradlew assemble 2>&1. Запуск вышеупомянутого через командную строку возвращает успех:

command line build success

Однако, выполнение того же самого с exec('cd path/to/projectdir && gradlew assemble 2>&1', $output) и вывод на печать возвращает: ... * [24] => FAILURE: Build failed with an exception. [25] => [26] => * What went wrong: [27] => Execution failed for task ':app:processDebugResources'. ... (полный вывод https://pastebin.com/zdeXuukp)

Насколько я могу судить, единственное различие между ними заключается в владельце процесса (на основе exe c ('whoami) «)). Любая идея, если это может быть причиной сбоя или что еще может вызвать сбой сборки PHP exe c?

1 Ответ

0 голосов
/ 27 апреля 2020

После долгих копаний мои подозрения подтвердились, это действительно было связано с тем, что у пользователя apache были неправильные разрешения. Вот ответ: Возможно ли, чтобы WAMP запустил httpd.exe как пользователь [себе] вместо локальной системы?

В этом случае я просто играл на своей локальной машине и, очевидно, я бы не рекомендовал этот подход в производственной среде. Вот как я его решил:

  1. Закрыть WAMP.
  2. Открыть services.ms c (win + r services .ms c)
  3. Изменить wampapache64, wampmariadb64 & wampmysqld64 Щелкните правой кнопкой мыши> Свойства> вкладка входа и укажите учетную запись пользователя, чтобы запустить службу как (я использовал свою учетную запись пользователя, поскольку я знал, что она уже имеет правильную разрешения) и Применить изменения.
  4. Открыть WAMP.
  5. Доступ к странице PHP через браузер с простым echo exec('whoami') теперь должен выводить то же самое, что и запуск whoami непосредственно в команде line.

Мой скрипт теперь выполняется правильно и возвращает тот же вывод, что и при запуске через командную строку.

...