我试图在php中调用java程序,将其与web界面一起使用。
Java程序依赖于外部lib: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:当我使用命令行时它输出正确;)
答案 0 :(得分:0)
你是对的,每个shell_exec创建一个单独的shell。
env CLASSPATH=whatever java -switches
答案 1 :(得分:0)
你应该能够这样称呼它。
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');
另一个选择是单独发出2个命令,但是对于同一个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
答案 2 :(得分:0)
我会用
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');
和(这很重要)将tilde(〜)替换为目录的实际路径(/home/yourname
说)。 〜由shell扩展,取决于你正在使用的shell。
答案 3 :(得分:0)
尝试使用您要执行的命令创建一个简单的shell脚本。您可以将参数传递给shell脚本,这也不是问题。
例如
echo "Running Script..."
java -cp $CLASSPATH:~/lib/commons-cli-1.2.jar ComputePagerank -i $1 -d $2 -e $3 -o $4 > message
等
然后尝试使用一些参数从命令行调用它。输出了吗?然后尝试从php脚本中调用它。输出了吗?如果没有,那么您可能需要检查权限。前段时间我有一个简单的经验,一个Java程序根本没有写文件的权限。