Как выполнить java-команду с php-страницы с помощью функции shell_exec()?

Я пытаюсь запустить программу Java со страницы PHP, используя функцию shell_exec(), проблема в том, что всегда возвращается пустой ответ. При запуске команды типа: ls, whoami, which работает. Я думаю, что это связано с предоставлением доступа пользователю www-data, но я до сих пор не могу найти способ сделать это.

Я попытался изменить файл /etc/sudoers с помощью команды sudo visudo, чтобы добавить в конец файла следующую строку, которая предполагает предоставление доступа для выполнения java команда:

www-данные ВСЕ=NOPASSWD: /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java

и пробовал с этим тоже:

www-данные ВСЕ=NOPASSWD: /usr/bin/java

Я использую следующий код для вызова команды java со страницы php:

$result = shell_exec('java -версия');

эхо $результат;

Я ожидаю вывод вызванной команды, но фактический вывод пуст.

заранее спасибо.


person Asuej    schedule 12.06.2019    source источник
comment
Вы можете попробовать добавить 2›&1. Может быть дубликатом: заголовок stackoverflow.com/questions/15086572/   -  person Senthil    schedule 13.06.2019
comment
Я пытался добавить 2›&1, но это не сработало.   -  person Asuej    schedule 13.06.2019


Ответы (3)


Попробуйте этот код:

exec('java -version '.' 2>&1', $result);
var_dump($result);

Ссылка: https://medium.com/@jnheo/setting-up-a-web-service-php-to-spit-out-results-from-a-jar-file-213667eb008a

person Senthil    schedule 13.06.2019
comment
Я тоже пытался, но не работает. На данный момент я почти уверен, что это связано с привилегиями пользователя www-data. - person Asuej; 14.06.2019
comment
Этот код работает для меня и получает вывод: -b09) [2]=> string(64) Java HotSpot(TM) 64-битный сервер VM (сборка 25.201-b09, смешанный режим) }. шаг 1. Итак, вам нужно проверить/убедиться, что ваш путь имеет доступ к исполняемому файлу java или указать полный путь. бывший. exec(/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java -version. 2›&1, $result); шаг 2. отключить безопасный режим в php.ini или .htaccess: ссылка: stackoverflow.com/questions/24999673/ - person Senthil; 14.06.2019
comment
К сожалению, в PHP 7.2 нет безопасного режима, в документации по php сказано: Эта функция УСТАРЕЛА с PHP 5.3.0 и УДАЛЕНА с PHP 5.4.0. Ссылка на документацию - person Asuej; 18.06.2019

Я только что проверил, и он работает

<?php 
    $out = shell_exec('java 2>&1');
    echo '<pre>'.$out.'</pre>';
?> 

Ссылка: Что означает 2›&1 в оболочке?

person Vipertecpro    schedule 19.06.2019
comment
Команда, которую мне нужно выполнить, es java, и эта конкретная команда всегда возвращает пустой ответ. - person Asuej; 19.06.2019

Это может сработать.

echo shell_exec("echo " . $command_to_exec . " > myfile.java && javac myfile.java && java myfile.java");

выполняет только одну строку кода Java.

person mayank1234r56    schedule 16.10.2020