我正尝试在php中调用一个java程序,以便在web界面中使用它。
Java程序依赖于外部库: commons-cli-1.2.jar
所以基本上我需要在调用java程序之前导出它;但是如果我首先导出它,如下所示:
shell_exec('export CLASSPATH=$CLASSPATH:~/lib/commons-cli-1.2.jar');然后像下面这样调用java程序:
shell_exec('java ComputePagerank -i $para_i -d $para_d -e $para_e -o $para_o');我认为它为每个调用创建了不同的shell;然后导出对java程序没有任何影响。还是我错了?
否则,它应该在服务器中输出一个文件。但事实并非如此。那么,出了什么问题呢?有什么想法吗?
编辑:然而,会不会是因为一些参数,比如para_i代表了一个输入文件名,所以我必须为它指定完整的路径?因为我只是假设如果输入文件在相同的工作目录中,就不会有任何问题,不是吗?
edit-2:当我使用命令行时,输出正确;)
发布于 2009-12-02 21:19:31
您说得对,每个shell_exec都创建了一个单独的外壳。
env CLASSPATH=whatever java -switches发布于 2009-12-02 21:20:04
你应该可以这样称呼它。
shell_exec('java -cp $CLASSPATH:~/lib/commons-cli-1.2.jar ComputePagerank -i $para_i -d $para_d -e $para_e -o $para_o > message');另一种选择是分别发出这两个命令,但使用相同的shell,如下所示:
shell_exec('export CLASSPATH=$CLASSPATH:~/lib/commons-cli-1.2.jar; java ComputePagerank -i $para_i -d $para_d -e $para_e -o $para_o > message');编辑:在设置变量时,有些shell不允许调用export。因此,这可能比上面的第二种选择更安全:
shell_exec('CLASSPATH=$CLASSPATH:~/lib/commons-cli-1.2.jar; export CLASSPATH; java ComputePagerank -i $para_i -d $para_d -e $para_e -o $para_o > message');另一个编辑:如果上面的方法都不起作用,那么你将不得不进行更多的故障排除。你的java程序能在命令提示符下工作吗?
java -cp $CLASSPATH:/home/user/lib/commons-cli-1.2.jar ComputePagerank -i param1 -d param2 -e param3 -o param4 > message发布于 2009-12-02 21:28:36
我会用
shell_exec('java -cp $CLASSPATH:/home/yourname/dir/lib/commons-cli-1.2.jar ComputePagerank -i $para_i -d $para_d -e $para_e -o $para_o > message');并且(这一点很重要)将代字号(~)替换为您的目录的实际路径(比如/home/yourname)。~由shell扩展,并且取决于您使用的shell。
https://stackoverflow.com/questions/1832840
复制相似问题