执行php脚本

时间:2011-08-17 18:20:42

标签: php javascript ajax

我正在构建一个php应用程序。在脚本中,有一个执行jar文件的调用:

?php
exec('java -jar simulations/simulation.jar');
?>

问题是此命令行执行jar文件:

user@ubuntu: php execSimulation.php

但不是来自网页的电话。这个电话是由AJAX发出的,我错过了什么?

<!-- Script to execute the simulation -->
<script type="text/javascript" src="prototype.js"></script>
        <script>

            function sendRequest() {
                new Ajax.Request("ejecutarSimulacion.php", 
                    { 
                    method: 'post', 
                    postBody: 'name='+ $F('name'),
                    onComplete: showResponse 
                    });
                }

            function showResponse(req){
            alert(req.responseText);
            }
        </script>

<form id="test" onsubmit="return false;">
                                <input type="hidden" value="<?php echo $simulacion; ?>" name="name" id="name" >
                                <input type="submit" value="<?php echo $nombre; ?>" onClick="sendRequest()">
                            </form>

当我尝试仅打印我发送的参数时,例如,警报显示它,所以我确信调用正在到达服务器,但我不知道为什么jar文件没有被执行。请问有什么想法吗?

提前致谢。

修改

错误追踪:

No protocol specified
Exception in thread "main" java.lang.InternalError: Can't connect to X11 window server using ':0.0' as the value of the DISPLAY variable.
    at sun.awt.X11GraphicsEnvironment.initDisplay(Native Method)
    at sun.awt.X11GraphicsEnvironment.access$200(X11GraphicsEnvironment.java:62)
    at sun.awt.X11GraphicsEnvironment$1.run(X11GraphicsEnvironment.java:178)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.awt.X11GraphicsEnvironment.<clinit>(X11GraphicsEnvironment.java:142)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:186)
    at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:82)
    at java.awt.Window.init(Window.java:385)
    at java.awt.Window.<init>(Window.java:438)
    at java.awt.Frame.<init>(Frame.java:419)
    at java.awt.Frame.<init>(Frame.java:384)
    at javax.swing.JFrame.<init>(JFrame.java:174)
    at org.opensourcephysics.tools.TranslatorTool.<init>(Unknown Source)
    at org.opensourcephysics.tools.TranslatorTool.<clinit>(Unknown Source)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:186)
    at org.opensourcephysics.display.OSPRuntime.<clinit>(Unknown Source)
    at org.opensourcephysics.controls.OSPLog.fine(Unknown Source)
    at org.opensourcephysics.tools.ResourceLoader.addSearchPath(Unknown Source)
    at _users.tanqueCalentamiento.TanqueCalentamiento.<clinit>(TanqueCalentamiento.java:18)
Could not find the main class: _users.simulation.Simulation. Program will exit.

3 个答案:

答案 0 :(得分:2)

您的jar似乎需要运行X服务器。

  

无法使用':0.0'作为DISPLAY变量的值连接到X11窗口服务器。

当您从命令行运行它时,您是否正在运行X?如果你这样做,这将解释为什么它在那里工作,而不是PHP。

您可以尝试从PHP“劫持”正在运行的X会话。

exec('DISPLAY=:0 java -jar simulations/simulation.jar');

您可能必须先从命令行运行xhost +localhost(或xhost +),以允许用户运行PHP以连接到X.

答案 1 :(得分:2)

在杰米萨维奇不朽的话语中,“这是你的问题。”

您正在运行的Java程序正在尝试在初始化时访问您的X Windows“服务器”(即屏幕),当您从命令行运行而不是从无头Web服务器运行时,该程序正常运行。请与编写org.opensourcephysics.tools.TranslatorTool的人讨论如何禁用此(严重功能失调)行为。

答案 2 :(得分:0)

使用exec()中的完整路径:CLI SAPI和apache之间的基本路径不同。

 <?php 
 exec('full/path/to/jar');