我正在尝试在我的php代码的后端运行一个Jar文件。但是我没有得到它所需的输出。有一个jar文件在后台运行并返回任何关键字的页面排名和域名。 我附上代码,请给我任何解决方案,因为当我在终端上运行它时,它会提供正确的输出。
以下是代码:
<?php
set_time_limit(0);
function returnJarPath()
{
$jarPath = $_SERVER['DOCUMENT_ROOT'] . "myFolder/tools_new/includes/Rank.jar";
return $jarPath;
}
$jar = returnJarPath();
$command = "java -jar $jar aspdotnet/microsoft.com";//Passing the Argument to the Jar file.
$shellOutput = shell_exec($command);
print "The Shell Output is : " ; var_dump($shellOutput);print "<br />";
exec($command,$executeCommmand);
print "The Exec returns the value : " ; var_dump($executeCommmand);print "<br />";
passthru($command,$passthruCommand);
print "The Passthru returns the value : " . $passthruCommand. "<br />";
?>
我刚检查了apache的错误日志,我发现的最后一个错误是:
sh:java:找不到命令
但正如我已经说过的,我一直在使用相同的命令通过SSH来运行Java命令。所以没有可能没有在服务器上安装JAVA。请帮我摆脱这个混乱... < / p>
答案 0 :(得分:3)
如果jar文件写入标准输出,则可以使用exec。
以下是我如何使用它的示例:
may be first: exec("cd jar dir"); // if jar fine needs to be executed from the same dir
$output = exec("/usr/bin/java -jar $jar aspdotnet/microsoft.com");
但正如你所说:
sh: java: command not found
这意味着php没有java的路径别名。只需使用可执行文件/ usr / bin / java的完整java路径。
答案 1 :(得分:0)
鉴于您正在呼叫java
。我敢打赌,输出显示在Java控制台中,而不是在shell中,PHP可以在其中提取文本信息。
如何解决这个难题?
你可以将结果写入文件,如果你有java源修改,然后通过php读取该文件以获得结果。碰撞的可能性非常大。另一个选择是让Java连接到您的MySQL数据库(如果有的话),然后运行java然后查询数据库以获取响应。当然,你需要传递Java一种方式来输入数据来插入你可以识别的记录(某种哈希),我从来没有在Java中这样做,只是你可能的理论能够做到。
<强>更新强>
您可能还需要按照darko petreski的建议尝试标准输出作为另一种选择。
答案 2 :(得分:0)
如果要在服务器中执行PHP代码(而不是通过命令行),运行java可执行文件的用户是www-data,而不是你。在这种情况下,请确保www-data具有读取jar文件和执行java可执行文件的权限
答案 3 :(得分:0)
我要检查/更改的第一件事是函数中您从中构建$jarPath
变量的行:
$jarPath = $_SERVER['DOCUMENT_ROOT'] . "myFolder/tools_new/includes/Rank.jar";
到此:
$jarPath = $_SERVER['DOCUMENT_ROOT'] . "/myFolder/tools_new/includes/Rank.jar";
$_SERVER['DOCUMENT_ROOT']
中可能不会出现尾部斜杠,这可能会导致问题。
我假设当你说它从控制台运行时,你正在运行java命令:
$ java -jar /rest/of/path/myFolder/tools_new/includes/Rank.jar aspdotnet/microsoft.com
我会确保你在$command
变量中包含java二进制文件的路径,如此...
$command = "/path/to/java -jar $jar aspdotnet/microsoft.com";
拥有Web服务器进程的用户可能没有包含Java二进制文件路径的$ PATH变量。