代码之家  ›  专栏  ›  技术社区  ›  Nishant Shrivastava

如何通过PHP代码运行shell命令?

  •  8
  • Nishant Shrivastava  · 技术社区  · 14 年前

    我附上代码,请给我任何解决方案,因为当我在终端上运行它,它是给正确的输出。

    代码如下:

        <?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 />";
    ?>
    

    sh:java:未找到命令

    4 回复  |  直到 14 年前
        1
  •  3
  •   darpet    14 年前

    如果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路径。

        2
  •  0
  •   Community CDub    8 年前

    既然你在打电话 java

    如果您有java源代码要修改,那么您可以将结果写入一个文件,然后通过php读取该文件以获得结果。在这里发生碰撞的可能性是相当大的。另一种选择是让Java连接到MySQL数据库(如果有),然后运行Java,然后查询数据库以获得响应。当然,您需要向Java传递一种方法,让它输入数据以插入您可以识别的记录(某种哈希),我从来没有在Java中这样做过,只是一个关于如何 也许能做到 .

    更新

    您可能需要尝试由建议的标准输出 darko petreski

        3
  •  0
  •   Silvio Donnini    14 年前

        4
  •  0
  •   Buggabill    14 年前

    我要检查/更改的第一件事是函数中的行,在该行中您正在构建 $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 像这样变化无常。。。

    $command = "/path/to/java -jar $jar aspdotnet/microsoft.com";
    

    拥有web服务器进程的用户可能没有包含Java二进制文件路径的$PATH变量。