0

我正在尝试在 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');

我认为它为每个调用创建不同的外壳;那么导出对java程序没有任何影响。还是我错了?

否则,它应该在服务器中输出一个文件。但根本没有。那么,有什么问题呢?任何想法?

编辑:但是可能是因为某些参数(例如 para_i)代表输入文件名,所以我必须为此指定完整路径吗?因为我只是假设如果输入文件在同一个工作目录中,就不会有任何问题,不是吗?

edit-2:当我使用命令行时它正确输出;)

4

4 回答 4

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 程序根本没有写入文件的权限。

于 2009-12-02T13:42:52.207 回答
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');

并且(这很重要)将波浪号(〜)替换为您目录的实际路径(/home/yourname例如)。~ 由 shell 扩展,取决于您使用的 shell。

于 2009-12-02T13:28:35.590 回答
0

你是对的,每个 shell_exec 创建一个单独的外壳。

env CLASSPATH=whatever java -switches
于 2009-12-02T13:19:31.357 回答
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
于 2009-12-02T13:20:03.820 回答