从PHP执行Java JAR将不起作用

时间:2010-05-17 18:33:58

标签: java php unix exec shell-exec

我有一个生成HTML文件的java程序。 Java程序有两个输入参数:file1和file2,输出文件由“--file =”指定。

从命令行执行时(UNIX,Mac OS 10.6.2),它看起来像这样:

"java -jar program.jar http://my.testsite.com/test1.html http://my.testsite.com/test2.html --file=/path/to/jar/new_file_1274119954.html

从命令行执行程序会生成文件“new_file_TIEMSTAMP.html”

现在我想在PHP中执行相同的行格式,所以我创建了以下脚本:



$file1 = 'http://my.testsite.com/test1.html';
$file2 = 'http://my.testsite.com/test2.html';
$newFile = '/path/to/jar/new_file_'.time().'.html';


system("java -jar program.jar $file1 $file2 --file=$newFile");

$handle = fopen($newFile, "r");
$output = fread($handle, filesize($newFile));

echo "$output";

您可以看到,我对控制台输出并不感兴趣,而是对程序生成的文件感兴趣。

我还使用以下调用来执行console命令,但是当我从浏览器执行这个PHP脚本时,它们都不起作用。

我不确定我的php.ini中是否需要启用一些特殊设置,或者我做错了什么,但我不知道现在该做什么。

感谢您的帮助

PD:

使用系统调用时,我收到的一条错误消息如下: javax.xml.transform.TransformerException:org.xml.sax.SAXException:必须在startDocument()之前调用setResult()。

3 个答案:

答案 0 :(得分:2)

嗯,Java异常告诉我们那里有一个XML异常,所以可能先看看你的源文件是否有效?从这里很难说出Java应用程序的作用。

此外,我还要看看apache或PHP用户是否有权执行Java应用程序并创建文件。

祝你好运。

答案 1 :(得分:0)

我真的不太了解PHP,但是当你进行system("java -jar program.jar $file1 $file2 --file=$newFile")调用时,它可能没有评估$file1$file2的值,所以你要求它找到一个名为$file1的文件,而不是test1.html?

相反,我认为你想要像

这样的东西
$cmd = "java -jar program.jar " . $file1 . " " . $file2 . "--file=" . $newFile;
system($cmd);

答案 2 :(得分:0)

假设您遇到了与我一样的问题,使用DaisyDiff,您需要在将文件放入其中之前创建目录。它不会自己创建所需的文件。

希望这会有所帮助!