【问题标题】:Running Quercus PHP inside Java在 Java 中运行 Quercus PHP
【发布时间】:2012-11-12 15:45:15
【问题描述】:

我正在尝试从我的 Java 应用程序运行一些 PHP sn-ps。

我看过这个问题: PHP Call from Java Using Quercus

这很简单:

import com.caucho.quercus.QuercusEngine;

QuercusEngine engine = new QuercusEngine();
engine.setOutputStream(System.out);
engine.executeFile("src/test.php");

我看到http://wiki.caucho.com/Quercus%3a_Command_Line_Interface_%28CLI%29 表明:

QuercusEngine engine = new QuercusEngine();
engine.setIni("foo", "bar");
engine.execute("<?php var_dump(ini_get('foo')); ?>");

但在这样做时,我得到:

Exception in thread "main" com.caucho.quercus.QuercusErrorException: eval::1: Fatal Error: 'var_dump' is an unknown function.
        at com.caucho.quercus.env.Env.error(Env.java:6559)
        at com.caucho.quercus.env.Env.error(Env.java:6445)
        at com.caucho.quercus.env.Env.error(Env.java:6109)
        at com.caucho.quercus.expr.CallExpr.evalImpl(CallExpr.java:198)
        at com.caucho.quercus.expr.CallExpr.eval(CallExpr.java:151)
        at com.caucho.quercus.expr.Expr.evalTop(Expr.java:523)
        at com.caucho.quercus.statement.ExprStatement.execute(ExprStatement.java:67)
        at com.caucho.quercus.program.QuercusProgram.execute(QuercusProgram.java:413)
        at com.caucho.quercus.QuercusEngine.execute(QuercusEngine.java:139)
        at com.caucho.quercus.QuercusEngine.execute(QuercusEngine.java:100)

对于任何函数,我都会得到相同的结果——strlen、strcmp、phpinfo 等。

http://quercus.caucho.com/ 所述...

Quercus .war 文件可以在 Java 应用服务器上运行,例如 Glassfish,即它可以在 Resin 之外运行。这个 .war 文件 包括 Quercus 解释器和 PHP 库。

我已经从那个页面下载了战争文件 (http://caucho.com/download/quercus-4.0.25.war)

并且正在运行

$ javac -cp 'WEB-INF/lib/resin.jar;.' TestQuercus.java
$ java -cp 'WEB-INF/lib/resin.jar;.' TestQuercus

完整的文件是

import com.caucho.quercus.QuercusEngine;

public class TestQuercus {

    public static void main(String[] args) throws Exception {
    QuercusEngine engine = new QuercusEngine();
    engine.setIni("foo", "bar");
    engine.execute("<?php var_dump(ini_get('foo')); ?>");
    }

}

能够做到

java -cp 'WEB-INF/lib/resin.jar' com.caucho.quercus.CliQuercus foo.php

其中 foo.php 包括 &lt;?php phpinfo; ?&gt;

那么我怎样才能从那里到达一个正常工作的 QuercusEngine?

谢谢,

【问题讨论】:

    标签: java quercus


    【解决方案1】:

    如下所示。

    import javax.script.ScriptEngine;
    import com.caucho.quercus.script.QuercusScriptEngineFactory;
    
    QuercusScriptEngineFactory factory = new QuercusScriptEngineFactory();
    ScriptEngine engine = factory.getScriptEngine();
    
    String code = "<?php $foo = strlen('abc'); print $foo; return 'yikes'; ?>";
    Object o = engine.eval(code);
    System.out.println(o);
    

    【讨论】:

      【解决方案2】:

      这是一个错误。我刚刚为 4.0.33 修复了它,它应该很快就会发布。如果您愿意,您可以从我们的公共 svn 存储库中自己构建 Quercus:

      svn checkout svn://svn.caucho.com/home/svn/svnroot/resin/trunk resin
      cd resin
      ant
      

      jar 将是resin/lib/resin-kernel.jar 和resin/lib/quercus.jar。

      有关错误参考,请参阅http://bugs.caucho.com/view.php?id=5270

      【讨论】:

      • 嗨。感谢您的答复。不过,我现在将自己的答案标记为答案,因为它适用于分布式源(与中继)。
      猜你喜欢
      • 2011-07-14
      • 2012-09-20
      • 1970-01-01
      • 2011-04-11
      • 1970-01-01
      • 2017-07-26
      • 2012-04-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多