我正在尝试从Java应用程序中运行一些PHP代码段。

我已经看到了这个问题:
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包含<?php phpinfo; ?>

那么,如何才能从那里运行QuercusEngine?

谢谢,

最佳答案

如下工作。

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);

09-27 12:59