当从php代码调用java应用程序时,使用特定的jvm安装


Use specific jvm installation when call java application from php code

我的帐户上安装了两个JDK,我没有root权限将默认的"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应用程序不工作在默认的一个。

谢谢

如果可行,在运行Java程序时限定java命令,例如/home/username/jdk/bin/java

这样你甚至可以在PHP代码的不同位置使用多个不同的JVM。

注意:我知道使用像这样的限定访问在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");