2

我正在尝试从我的 Java 应用程序运行一些 PHP 片段。

我见过这个问题: 使用 Quercus 从 Java 调用 PHP

这简单地表明:

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 文件可以在Glassfish 等Java 应用服务器上运行,即它可以在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 呢?

谢谢,

4

2 回答 2

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);
于 2012-11-13T07:51:10.933 回答
1

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

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

罐子将是树脂/lib/resin-kernel.jar 和树脂/lib/quercus.jar。

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

于 2012-11-13T18:31:47.260 回答