Используйте конкретную установку jvm при вызове java-приложения из кода php

1

У меня есть две установки 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-кода, не работает на стандартном.

благодаря

Теги:
path

2 ответа

0

Если это возможно, квалифицируйте команду java, например /home/username/jdk/bin/java, при запуске вашей Java-программы.

Таким образом, вы можете использовать несколько разных JVM в разных местах вашего PHP-кода.

Примечание. Я знаю, что использование квалифицированного доступа, подобного этому, работает в Windows, даже если JAVA_HOME указывает на другую установку. Я предполагаю, что это верно для Linux.

  • 0
    Он не работает на Linux, он дает мне: sh: 1: /home/username/jdk1.7.0_51/bin/java: не найден Эта же команда из командной строки работает хорошо.
0

Попробуйте установить 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");
  • 0
    Вот что я попробовал: $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) Таким образом, это не сработало.
  • 0
    Я просто поместил эту строку в php файл: passthru("JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home java -version"); , Он показывает java version "1.7.0_51" при запуске из командной строки. Вы выполняете файл PHP через веб-сервер?
Показать ещё 7 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню