У меня есть две установки JDK в моей учетной записи, и у меня нет корневого доступа для изменения значения по умолчанию, которое является "usr/bin/java" для конкретного объекта /home/username/jdk/bin/java "
Я попытался сделать следующее в моем php-коде:
$JAVA_HOME = "/home/username/jdk";
$PATH = "$JAVA_HOME/bin:".getenv('PATH');
putenv("JAVA_HOME=$JAVA_HOME");
Но когда я выполняю следующее чуть ниже указанных строк:
which java
Я получил /usr/bin/java
Любая идея, пожалуйста, как это сделать? Явное приложение, которое я хочу запустить из php-кода, не работает на стандартном.
благодаря
Если это возможно, квалифицируйте команду java
, например /home/username/jdk/bin/java
, при запуске вашей Java-программы.
Таким образом, вы можете использовать несколько разных JVM в разных местах вашего PHP-кода.
Примечание. Я знаю, что использование квалифицированного доступа, подобного этому, работает в Windows, даже если JAVA_HOME указывает на другую установку. Я предполагаю, что это верно для Linux.
Попробуйте установить JAVA_HOME
качестве временного параметра для контекста вашего приложения, то есть перед командой (см. Вторую команду, остальные просто показывают, что переменная установлена только для этой команды):
> java -version
java version "1.8.0"
> JAVA_HOME=~/jdk1.7.0_51.jdk/ java -version
java version "1.7.0_51"
> java -version
java version "1.8.0"
В PHP:
exec("JAVA_HOME=~/jdk1.7.0_51.jdk/ java yourapplication");
Источник: Справочное руководство Bash - Окружающая среда
Среда для любой простой команды или функции может быть временно добавлена путем префиксации ее назначениями параметров, как описано в параметрах Shell. Эти утверждения присваивания влияют только на среду, видимую этой командой.
Чтобы увидеть различия в браузере, я тестировал этот уродливый PHP-фрагмент:
<?php
echo "<pre>" . shell_exec('java -version 2>&1') . "</pre>";
echo "<pre>" . shell_exec('JAVA_HOME=~/jdk1.7.0_51.jdk java -version 2>&1') . "</pre>";
echo "<pre>" . shell_exec('~/jdk1.7.0_51.jdk/bin/java -version 2>&1') . "</pre>";
?>
Вы также можете использовать определенную версию исполняемого файла java
, явно используя его для запуска вашего приложения:
shell_exec("~/jdk1.7.0_51.jdk/bin/java -version");
$cmd = "JAVA_HOME=/home/username/jdk1.7.0_51/ java -version 2>&1"; $output=passthru($cmd,$status);
выходные данные: java version "1.6.0_33" OpenJDK Runtime Environment (IcedTea6 1.13.5) (6b33-1.13.5-1ubuntu0.12.04) OpenJDK Server VM (build 23.25-b01, mixed mode)
Таким образом, это не сработало.
passthru("JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home java -version");
, Он показывает java version "1.7.0_51"
при запуске из командной строки. Вы выполняете файл PHP через веб-сервер?