所以我有一个可运行的Java jar,其中包含将由PHP调用的Java库代码,目前我在PHP中调用应用程序代码,如下所示:
$userIdinput = "abcd";//参数
exec("java -jar MyApplication.jar ".$userIdinput,$output);
print_r(输出)美元;
这个jar文件需要运行在不同的环境QA,生产和我的本地windows机器上。QA和生产将在linux机器上进行。这些环境中的每一个都有自己不同的属性变量。
我想知道什么是这样做的最有效的方法,当我把MyApplication.jar文件在服务器位置,它会读取属性变量从一个文件,我放在服务器上的某个地方?
我试过classpath,但不能让它工作。非常感谢您的帮助!!!!
设置不同配置的最佳方法是使用配置文件。当您在示例中运行它时,我假设jar文件位于当前目录中。所以,很容易在那里也有配置文件,只是从当前目录中读取它,这也是java应用程序的工作目录。
在您的代码中,您可以这样做:File f = new File("configuration")
,它将尝试在当前工作目录中查找一个文件,名称为configuration。
首先,如果$userIdinput
确实来自某些用户输入,那么这可能不是很安全。它们可能会从你的命令中逃出来,在你的服务器上执行任意的东西。
至少,如果必须使用exec,请首先尽可能多地验证输入(如果它应该是整数,则对其进行强制转换,如果不是则抛出错误),并且还要使用escapeshellarg。
你在问什么有点不清楚-但是如果你试图在PHP中从服务器上的文件加载属性变量,那么有很多方法可以实现这一点。您可以创建一个带有相对路径的ini文件,例如:
$properties = parse_ini_file("../local_properties.ini");
exec("java -jar MyApplication.jar ".escapeshellarg ( $properties['userIdinput']),$output);
那么ini文件只需要定义本地属性:
; Your local property:
userIdinput = ABCD
最简单的解决方案是您的Java程序在当前目录中查找属性文件,例如MyApplication.properties
。只要调用者将当前目录设置为包含Jar文件的目录(您的exec
示例将指出这一点,因为. Jar是不合格的),Java程序就可以找到它。
在Linux上,MyApplication.properties
可以是指向实际文件的符号链接,可能存储在/etc
中。
此代码不依赖于操作系统,但允许每个安装指定自己的本地配置值。